Wednesday, October 23, 2019

The path to LoRaWAN

In 2017 I already tried to get a LoRa based radio link working. Which worked, but only as a
local send / receive solution. At the time The Things Network (TTN) was already operational, but it was quite complex to get started with it, certainly if you don't live near a public TTN node so you could not just send some data to it. I briefly considered setting up my own station, but at an estimated cost of €300,- this was still a bit too much for just a hobby project.
Nowadays TTN has matured, and it is easier to find information on how to access it. There is a complete description on Adafruit on how to build a single channel gateway, and there are several DIY project on how to build simple LoRa Nodes. 
The easiest way would of course be to buy a complete LoRa enabled board, like the LoPy,  the Adafruit Feather with LoRathe WISEN Whisper Node, the MIKRO Electronika Lora5 Click, or just one of the TTN products. (And there are many more, just Google 'LoRa Board')
But I already have these Dragino LoRa Bee units and I want to use them. Should not be that hard since they are basically just RF95W transceiver modules on a carrier board. And the RF95 modules are at the heart of 99% of all other LoRa devices. 
A very nice description of a DIY LoRa node is described by Mario Zwiers in a few blog posts that basically describe what I wanted to do. He created a small PCB with an Arduino Micro, a battery charger and a bare RF95W module. Unfortunately he just created the PCB from scratch, without a schematic. So I have to figure that out myself, but since the combinations are limited that cannot be too hard.

Connecting LoRa Bee and Raspberry Pi Zero W

 Pi to LoRa Bee wiring:
  • 3.3V to Raspberry Pi 3.3V
  • GND to Raspberry Pi Ground
  • DIO0 to Raspberry Pi GPIO #3
  • RST to Raspberry Pi GPIO #25
  • SCK to Raspberry Pi SCK
  • MISO to Raspberry Pi MISO
  • MOSI to Raspberry Pi MOSI
  • CS to Raspberry Pi CE1  

Next I followed the basic instructions on installing Python. First installed the latest Raspbian to an SD card. Booted it on the Pi, and used raspi-config to set a Hostname, new password, and the WiFi network parameters. And from the 'Interfacing Options' section I also enabled SSH, SPI and I2C.
Run the standard updates:
sudo apt-get update
sudo apt-get upgrade
sudo pip3 install --upgrade setuptools
If above doesn't work try
sudo apt-get install python3-pip

Then install the GPIO libraries:
pip3 install RPI.GPIO

And the Adafruit libraries:
pip3 install adafruit-blinka 

(All this is also on the Adafruit site, I just repeated the steps here for convenience)
Next install the RFM libraries:
sudo pip3 install adafruit-circuitpython-rfm9x

After that I created a simplified version of the Adafruit sample program that would just check if the RFM unit was connected and working. Note that I changed the frequency setting in the RFM9x() function to 868.0, which is the frequency used in Europe.

#Learn Guide:
#Author: Brent Rubell for Adafruit Industries

import time
import busio
from digitalio import DigitalInOut, Direction, Pull
import board

# Import the RFM9x radio module.
import adafruit_rfm9x

# Configure RFM9x LoRa Radio
CS = DigitalInOut(board.CE1)
RESET = DigitalInOut(board.D25)
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)

    # Attempt to set up the RFM9x Module
    rfm9x = adafruit_rfm9x.RFM9x(spi, CS, RESET, 868.0)
    print("RFM9x: Detected")
except RuntimeError:
    # Thrown on version mismatch
    print("RFM9x: ERROR")


And it works:

The instructions tell you to clone the GIT repository . But GIT is not installed by default on  Raspbian. Use the following commands to get it :

$ sudo apt-get update
$ sudo apt-get install git-core

Next step would be to install WiringPi. But there is a slight problem: WiringPi is no longer available at the URL as given in the instructions. Apparently the creator of this library has given up on the open source community. Fortunately there is still a mirror of the code at Github, which then probably is no longer maintained but will work fine with most projects.:

git clone

Build it using 'sudo ./build'

Installing and running the Single Channel Gateway

The proceed to the next step, getting the single channel gateway code:

git clone

This can now be built by using 'sudo make all'
Since I wired the RPi directly to my Lora Bee, and did not add any buttons or the display I had to modify the code in '' so there were no references to the display any more and everything was just printed to the console. My modified code:
Now, what is not mentioned in the Adafruit guide is the fact that the unit is set-up according the settings in the file 'global_conf.json'. Which I had to modify to get it going for Europe.  I changed the frequency to 868.1 Mhz, and I swapped the servers so the is now the first in the list. Also set this to 'enabled:true', and the to false. and changed the "is_pi_xero":true (since I am using a Pi ZeroW for my gateway). Also note that "pin_dio0" is set to 3. So it should be connected to GPIO 3, and not (as written on the AdaFruit page) to 5.

  "SX127x_conf": {
    "freq": 868100000,
    "spread_factor": 7,
    "pin_nss": 11,
    "pin_dio0": 3,
    "pin_rst": 25
  "gateway_conf": {
    "ref_latitude": 0.0,
    "ref_longitude": 0.0,
    "ref_altitude": 10,
    "name": "Reigersbek51",
    "email": "",
    "desc": "RPi Zero-LoraBee 1-Ch Gateway",
    "is_pi_zero": true,
    "servers": [
        "address": "",
        "port": 1700,
        "enabled": true
        "address": "",
        "port": 1700,
        "enabled": false

Now I can start the gateway.: python3
and register the gateway at The Things Network.
Full description is on this page, no need to repeat it here...

But after completing the registration and starting the gateway it did not work. It did not show 'connected'. Then I noticed that when the gateway is started it prints  the Gateway ID. And that was all 00:00:FF:FF:00:00. So it looks like though the Python program displays the correct ID, the gateway code itself does not. Checking the code I noticed that there is a special case made for the Raspberry Pi Zero, which I am using. And in the initialisation I also see that 'Pi Zero' is set to 0. Even though I have changed this in the global_config.json to 'true' The fastest fix was to change line 102 in the .cpp file to: 

bool is_pizero = true;

My Modified code on GIST is here.

and run another 'sudo make all' .Which solved the problem.

The Sandbox Single Channel Gateway (LoRa GO DOCK)

The setup with the Raspberry Pi W and the LoRa Bee works fine. But just after finishing this,
I discovered the LoRa GO DOCK. At only $19,- this is a super cheap gateway, based on the ESP8266 so it's programmable using the Arduino IDE. Once programmed and configured the operation is similar to the RPi version, so it is a much easier solution. It's also super small, and comes with two antennas. The only drawback is that it has to come from China so it takes two to three weeks to deliver.

Tuesday, March 19, 2019

Getting started with SDL2

The Simple Directmedia Layer (SDL) is a mature framework that has been around for quite some time. Though mainly targeted at writing games it is good for any program that requires the creation of arbitrary graphics screens, like for example retro computer emulators. One of the more interesting aspects of SDL is that it is cross-platform. It runs fine on your PC, Mac or Linux computer. And this includes the ever so popular Raspberry Pi.
There are many excellent guides for setting up SDL on every platform.
TwinkleBearDev SDL2 Tutorials
Parallel Realities Game Tutorials
Lazy Foo Productions 

Visual Studio

There is a good step-by step guide on WikiHow to configure Visual Studio. It however is already outdated since the easiest way to set it up today is by using the Nuget package manager. One of the major benefits of going this way is that you can now simply switch between 32 and 64 bit builds by just selecting the target platform in the VS project type dropdown. So : Lets Get Started !

First use 'File->New->Project' to create a 'Visual C++' -> 'Empty Project'.

Right click the 'Project' and select 'Manage NuGet packages'. In the NuGet Package manager go to the 'Browse' tab, and search for SDL2. Select the latest SDL2 package and click install. 
Then scroll down an also install the 'SDL2_image', 'SDL2_ttf' and 'SDL2_mixer' packages for image handling, font management and sound. This basically configures your project completely for use with the SDL2 framework. 
The only thing you have to do manually is selecting the SubSystem target. To do this open up the System page and choose either Console or Windows from the drop down. If you choose Windows you won’t get a console window that opens up with stdout, if you choose Console you will. My advice is to choose Console, as the console window is really handy as a debugging tool.
Note that when you switch your target from 32 to 64 bit or vice-versa you will again have to choose the SubSystem target or your build will fail because it 'Cannot find an entry point for main()'

You are now ready to start your first SDL project. 
Right click the 'Source Files' folder and select 'Add ->; New Item...'. Select a 'C++ File', give it meaningful name if you want, and click OK. Open the empty C++ file, and copy the following:
#include "sdl.h"
#include "sdl_image.h"
#include <iostream>
#include <stdio>

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;

int main(int argc, char* args[]) {
    SDL_Window* window = NULL;
    SDL_Surface* screenSurface = NULL;
    SDL_Renderer *renderer=NULL;
    SDL_Texture *texture=NULL;
    SDL_Event event;
    SDL_Rect r;

    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        printf("Could not initialize SDL. SDL_Error: %s\n", SDL_GetError());
    else {
        if (window == NULL) {
            printf("Cannot create window. SDL_Error: %s\n", SDL_GetError());
        else {
            SDL_Rect arect;
            screenSurface = SDL_GetWindowSurface(window);
            SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 0x00, 0x00, 0x44));
            arect.x = 64; arect.y = 64; arect.w = SCREEN_WIDTH - 128; arect.h = SCREEN_HEIGHT - 128;
            SDL_FillRect(screenSurface, &arect, SDL_MapRGB(screenSurface->format, 0x00, 0x77, 0x77));


Run the program, and if all is well it will show a window with a blue border and green centre.

Tuesday, April 03, 2018

3D Printer V2 - Here We Go Again

Makr-B-Bot Version 1
A few years ago I built a 3D printer, made completely from standard MakerBeam. Inspired by the design of the first PrintrBot, which seemed a design that was easy to replicate using these little aluminium profiles. It turned out to be little more complicated than I originally thought, but in the end it worked out quite nicely.
A few things kept bothering me though. First it seems impossible to get rid of the overhang. When the arm is extended to the maximum, it tends to hang down. Not much, but with a layer height of 0.2 mm this soon becomes noticeable. Which also brings up the second annoyance: it is very hard to level the printbed. The adjustment nuts are difficult to reach and the mounting points are too close together, making it very hard to get the bed level. And every time I move the whole printer the process has to repeated.
So I already decided that the next printer design should be a the 'gantry crane' model, which also happens to be the most popular DIY 3D printer model at the moment. With of course the Prusa i3 as the absolute benchmark.
9 pieces of 240mm clear anodised OpenBeam
This time it started with the 'end of line' sale at Makerbeam of a 9 pieces set OpenBeam, originally intended for building a Kossel type printer. A quick sketch of the frame made me think that this was exactly what I needed to construct the basics. Which was wrong.

The parts in the set are 240 mm long. And a standard spindle is 300 mm. So obviously 240 it too short for the vertical stands. Also a standard print bed is 210x210, which means it has to move at least 200 to either side, making it a total travel of 400 mm. So I cut 2 beams in the middle, attached the 120 mm to a 240 piece and so created 4 pieces of 360. Connecting two pieces of OpenBeam is actually quite simple since the come with a 3mm centre hole. Just cut tap some M3 in it and screw in some M3 thread (a 2 cm  piece is enough) Then just screw the other beam on there and you're done. If tightened properly it's even hard to see where the two beams are attached. And so, with 4 pieces of 360 and 3 pieces of 240, the design seems a lot more practical.


When building the previous printer I already found that buying all the parts as separate items often exceeds the price of a complete printer kit from China. And things have not changed since then. That's to say the individual parts did all get a little cheaper, but so did the kits. For a mere €100 ~ €150,- you can buy a a minimal Chinese kit that contains almost all parts required to build a full printer. 

Anyway, here is the full list, with prices.

OpenBeam 240mm (9p) clear OpenBeam  €17.33
OpenBeam Hexagon head bolts 6mm (100p) for OpenBeam    €6.50
MakerBeam MakerBeam XL right angle bracket (12p) €8.95

Threaded rod for Z-axis dia.8mm 300mm 2 x €9.95 = € 19,90
Flexible coupling. 5 x 8 mm 2 x€4 = €8,-
GT2-6 belt € 2.75 x 2 = € 5.50
A4988 3D printer stepper driver € 2.85
Hotend Long 1,75mm € 11.95
Hotend cooling Fan holder € 3.36
NTC 100K with wire € 1.95
PTFE Teflon tube 2mm € 4.25
3d printer Heatbed spring € 0.55 x 4 € 2.20
GT2-6 20 Teeth Pulley Alumi € 2.95
Mounting bracket NEMA 17 € 4.45

Arduino Mega 2560 - clone    € 15,95    1    € 15,95
3D Printer controller RAMPS 1.4    € 9,95
3D Printer Aluminium + PCB Heatbed MK3    € 22,50

MK8 extruder 3d printer kit € 14.95
NEMA17 stepper |1.8 deg/step| 4 kg/cm | 42BYGHW609L20P1X2 3 x €12.50 = €37.50
NEMA17 stepper |1.8 deg/step| 5 kg/cm | SL42S247A €15,-
Stepstick DRV8825 motordriver 2 x €5.75
Steel rod, 8mm x 1m 2x €3.75 = €7.50
Microswitch endstop 4 x €2.25 = €9.00
 LM8UU linear bearing 4 pcs. €5,-
Belt roller with bearings €3.50

300 W PSU: €0,- (taken from an old server frame)

Total: €246.74
Again, quite some money, but less than the previous build.


As with my previous build, I just started with assembling the base. And because I remember how important stability is I added some extra makerbeam (10x10) bars at the bottom. 

At least I could use my existing 3D printer to print some essential parts.
The Y-Carriage was constructed from standard makerbeam pieces, and some aluminium strip:
I used only 3 linear bearings for the slider this time since that is what they use on the Prusa printers as well. I assume a three point support is indeed less likely to wobble. (EDIT: Later I found this was not a good idea, as the top left corner now was hanging down a bit . So I mounted the fourth bearing)
The Y axis motor assembly is a single hose clamp.

The first assembly:
 And the finished unit, as it is now:

 Some details:


Although the very first print comes out acceptable, there is one serious problem: the whole printer makes a terrible noise. Apart from the four fans, which all contribute a bit, there is the X carriage motor that is really loud and the Y motor that is less loud but still annoying. It looks like the stepping itself is the problem. Certainly on the X carriage this is even a visible problem, since in some positions the belt starts resonating more than a centimetre. So I decided to invest in two Stepstick DRV8825 motor drivers to replace the original A4988 drivers. And I replaced the the X carriage motor with a more powerful one. This makes a lot of difference. Both X and Y now move smooth and silent.  Then I placed the whole printer on a 2 cm layer of foam and that makes it even better. You can no longer hear the printing itself, it's the fan noise that prevails.

Pronterface for 2...

Now I have two printers that are physically different, I have problem with Pronterface. There is no way to save or load custom settings. So if I set it up for the new printer, the settings for the old one are simply replaced. Pronterface (or actually the Printrun) settings are stored in
C:\Users\ as  'printrunconf.ini' which is a simple readable text-file. So I just copied that to a different folder, and adjusted the setting for my new printer. One day I might even write a Batch file that automatically swaps the .ini files for the specific printer...

..or Octoprint

After facing some troubles with printing from my laptop, I realized this was the reason I mounted a LCD controller board to my first printer so I could print from SD card. After considering the option of moving the controller to my new printer I suddenly remembered reading about OctoPrint, and how convenient it is to have printer that can be controlled over WiFi. Which is true. A Raspberry Pi B+ with OctoPi on it is definitely a great way to create a stand-alone printer which can be controlled through a web-browser. 
My only problem with this setup is that it can sometimes take quite long to connect to the OctoPrint server. After I started my browser and pointed it at the IP address it sometimes takes more than a minute before the control page is visible and responds to my clicks. But once the file is loaded and the print starts everything runs smooth.

USB trouble

Since my other printer has a controller-board attached with  a SD card  slot, I have not been printing a lot from Pronterface directly so I forgot about this. But sometimes it seems like the serial stream to the printer stops or just passes command very slowly. The printhead stops or moves at a very slow pace which  causes humps in the plastic. After some time (30 seconds to a minute) it resumes normal speed  and prints as normal. I found this happened to others as well, but there does not seem to be a general solution, or even a definite cause for it. So I applied two of the tips I found so far:

- Disable the 'Monitor Printer' setting in Pronterface (Settings->Options). You won't be able to see the temperature of your heater and bed, and there will be no text window with printer messages any more. But this makes the data stream to the printer probably more efficient, and there is less chance that your computer is waiting for an answer that may not come. (Pure guessing though, I have not actually monitored the stream to see what's actually going on)

Check your 'Power Settings:
- Make sure the computer is set to  'Maximum Performance' and it does not go to sleep after 2 hours..
- Also in the power settings: check the setting of the USB and disable the "USB Selective suspend"


Saturday, June 17, 2017

Welcome to FPGA land

Welcome to FPGA land.. where the processing is faster, the resources more basic, and the number of three or four letter acronyms is huge. FPGA's (Field Programmable Gate Arrays) always fascinated me, but I never had the chance to work with them. Since they are a more application specific and harder to use than microcontrollers it has taken a little longer before they appeared in the hobby-space. Nowadays there are several development board available. Joel Williams did a really nice list of boards on his blog, so I don't have to repeat that. Still, a lot of the boards are $100,- and more, which still is a significant amount of money. Then I bumped into the Numato Labs 'Elbert V2 -Spartan 3A Development board' at only $29,95, which seems like a nice 'lets have go' price.
Getting it connected to my PC was easy. Just plug in the USB cable, and the board immediately starts running it's demo. Windows automatically recognizes and installs it as a USB comport. To use the board you should install the Numato Lab USB CDC Driver, which is available on their website. After downloading and unpacking the driver, just find the USB serial port in Windows Device Manager, right click and select 'Update driver'. Use the 'Browse my computer for drivers' option to point it at the driver you just downloaded and install. The port will now show up with the board name:


This appeared to be the hard part. There is basically just one option to program the Spartan-3 and that is the Xilinx ISE Design Suite. It is free, but it has not been maintained since 2014, so Windows 10 is not officially supported. It's also HUGE. It's nearly 7GB download, and takes up exactly 20GB of disk space after installation. So be prepared to spend at least a day to get everything up and running.
First get the Xilinx WebPack at:
I downloaded the 'All platforms' suite, which comes in 4 separate parts:
But further down the page there are also complete installers for either Windows or Linux.
All together this is 7 GB download, so you'll need some patience here.
If you downloaded the four parts as shown above, unzip only the first one (the one that ends in .zip, all the others have an extra .zx extension). This will create the file 'xsetup.exe'. Just click this to start the setup process. Which also takes at least an hour, so again: be patient.
After installation you will have to run the 'settings64.bat' file to setup the environment variables, which is in C:\Xilinx\14.7\ISE_DS.
Then click the ISE Design icon on your desktop to start the program..or not. On my machine it started, but crashed with the message: '_pn.exe stopped working'. The Xilinx forum came up with the following solution:

For everyone trying to use Xilinx ISE 14.5 in Windows 8 x64.
Rename libPortability.dll to libPortability.dll.orig, and copy libPortabilityNOSH.dll to libPortability.dll.

Do this in:

C:\Xilinx\14.5\ISE_DS\common\lib\nt64 (copy dll from first location)

 This turns off SmartHeap.

OK. So we'll have to do without the SmartHeap, whatever that is. But now the program indeed starts fine, also on my Windows 10 machine.
Next step is to acquire a license. The software points you at the right page on the Xilinx website, where you'll have to register again, select the required license and have this key mailed to you. This can be imported into the software, and finally we can start doing some real work...


A FPGA is programmed using a HDL (Hardware Description Language). There are two common flavours right now: Verilog and VHDL. I chose VHDL, mainly because I a colleague lent me a book named 'FPGA Protototyping By VHDL Examples Xilinx Spartan-3 Version ' by Pong P.Chu. (there is a Verilog version too, so it does not really matter).
Now this is a really expensive book, but there are also plenty of online resources. However, they may not all be specific to the Spartan-3. The FPGA centre for example has a nice VHDL Starter Guide.

Sunday, March 05, 2017

LoRa with the LoRa Bee

For some time already LoRa is the new hype. This Long Range Low Power radio technology makes it possible to send small amounts of data over long distances using very little power. I's associated mainly with the LoRaWAN network and IOT applications, but LoRa itself is just the radio and the low-level protocol that is used to transmit and receive bytes. You could just use two transceivers to transfer data one to one, not using any network protocol or dedicated access points.

As I wanted to start experimenting with LoRa at lowest possible costs I bought a set of LoRa Bee modules from Dragino. At US$36 ( including shipping) for a set of two, it was the cheapest option at the time (Second half of 2016). That they also came with a neat antenna was definitely a plus.
But when it became time to actually connect them and send some data,I found this a little bit harder than expected.
First the 'Bee' form factor itself. Its got a 2 mm pitch header that will not fit a standard breadboard. And the pins are too small for standard female to male jumper wires.
Second it is 3.3V only. So I bought an Arduino Mini Pro, 8MHz - 3.3V version, and made some jumper wires from an IC socket and a standard header.
It's connected as follows: NSS-10, MOSI-11, MISO-12, SCK-13.

The WAZIUP LoRa Project

Next we need some software to drive it. And here it gets a bit harder. There are so many options, many extensively documented but usually in an experimental state. I found the article by Congduc Pham, 'A DIY low-cost LoRa gateway' to come closest to what I wanted to achieve. And it actually contains a lot of information on connections, theory and applications. Professor Pham developed a simple protocol for just transferring data from multiple end-points to  central server, without the overhead of the full LoRaWAN stack. All this as part of a 'WAZIUP' project that aims to bring this type of networking to sub-Saharan African countries.
By just following the instructions in the .pdf it's easy to install the program to the Arduino and get the software on the Raspberry pi.

A few pitfalls that I found while getting this all to work:

- The instructions tell you to clone the GIT repository . But GIT is not installed by default on  Raspbian. Use the following commands to get it :

$ sudo apt-get update
$ sudo apt-get install git-core

- Compiling the Lora Gateway software for Raspberry Pi B+. Since it is a B+, I compiled it for the the Raspberry Pi 2 , but later I found that my board is the original Raspberry Pi B+, which actually is a Raspberry 1. So if nothing happens after you start the lora_gateway, check your version.

- Minimal time between messages. I started with the 'Arduino_LoRa_temp' program, but I changed the time between messages on the Arduino to 1 minute  ( idlePeriodInMin = 1; ).  After a while I noticed that the gateway did not receive every message, but actually only one in two. It looks like the software limits the amount of transmitted bytes per hour. After increasing the interval to 2 minutes it worked fine. When using the 'Arduino_LoRa_InteractiveDevice' program I noticed that this has no limitations, and you can send multiple messages with short intervals. Officially there is a limit on the available radio time (Time On Air or ToA) of 1%, meaning you should not have actual transmissions for more than a total of 3.6 seconds per hour. This is explained in section 29 of the FAQ.

- The driver software is called SX1272.cpp, but I have a RF95 . The SX1272 is identical to the RF-95 as used on the Lora Bee.

- When the messages are received on the gateway, but the message itself is unreadable they ar probably AES encrypted, and the gateway does not decode this. For testing it's easier to disable AES. Just comment out the define:
//#define WITH_AES

- CAD = Channel Activity Detection.
- SIFS =  Short InterFrame Space

What it looks like on the RPi when it's running:

(And a minor issue, actually only related to the Rasperry Pi: SSH is now disabled on Raspbian. I could not connect through SSH to my Raspberry Pi running Raspbian Lite. An article on the RPi site explains that on newer version SSH is disabled by default. It also has the solution: just add a file 'ssh' to the root folder of the SD card. Make sure you change the password..)

What's really cool about the code is that mr. Pham made clever use of the ArduPi library so the code for the Raspberry Pi and the Arduino is (almost) identical.


When you want to go for a solution that is compatible with the LoraWan network, I suppose nothing beats the simplicity of the LoPy, an integrated module with Lora, WiFi and bluetooth, programmed in Pyton. There is a nice introduction on Element14.

Using LoraWan and the associated 'The Things Network' requires a nearby gateway. Which, if none is available, you can build yourself. At a total cost of about €200,- this is definitely not a bad deal. But if that's a little too much for just  some simple experiments you can also build a super cheap single channel gateway.

Tuesday, February 14, 2017

Recovery of a ZLinx ZP24D Radio Modem

The ZP24D-25RM is  a 2.4 Ghz radio modem by B&B Electronics, branded as 'Zlinx'. Although sold as Plug&Play, it comes with basic software that actually shows quite a lot of options.
And if you get some settings wrong (like the sleep mode) , it may become impossible to access the modem.
The standard software however does not have a solution for this. There is no way to revert to 'Factory Settings' without connecting to the modem in command mode, which is no longer possible because the settings are wrong. There is no reset button or switch setting to manually reset it, so you are stuck .

When opening the modem in search of a reset-switch, it was found however that the this unit is actually just a standard XBee module with additional interfacing electronics.

The XBee is a XBEE PRO S1, a fairly common module, which makes searching for a solution a little easier.

The following comes from the Digi website, ( ) and disciusses ways to recover a 'sleeping Xbee:

A note regarding sleeping XBees:
If sleep mode has been enabled, the XBee may appear to be unresponsive since X-CTU expects the radio to be awake when performing any action on the radio. To see if the module is sleeping, go to the terminal tab and watch the Line Status indicator. If CTS periodically flashes, then the module is sleeping and only momentarily waking up.

Now this is exactly what has happened to my Zlinx. And they offer a solution, which almost works, except for a few issues.

First we will need the 'X-CTU' software, legacy version :
 (This was hard to find on the Digi website, but just Google it and the page will pop up.)

Then, if the X-CTU software connects to the unit, it will not recognize the module since it contains non-standard firmware.
To solve this, go to the folder where the ZLinx software is installed (E.G. C:\Windows\Program Files(x86)\B&B Electronics\ZLinx\ZlinxManager) There you'll find the folder 'Update' with the firmwares for the different types of Zlinx modems. Now copy all these folders to the 'update' folder in the folder where the X-CTU software is installed. (E.G. C:\Program Files (x86)\Digi\XCTU\update).

Now you can start the X-CTU software, select the right COM port and baud rate and then go to the 'Modem Configuration' tab. Select the modem type from the drop-down box:
FIRST click 'Show Defaults', so all settings are factory default. Then click 'Write'. The software will try to connect to the modem, and fail:
Now it's time to reset the XBee by switching power Off and On. The program will continue, and write the default settings to the XBee.

Saturday, July 02, 2016

The 'Makr-B-Bot' Part 2: Building the mechanics

After collecting the parts and studying the drawings and instructions of the Printrbot it's time to  start building. Before I got started I realized two things are very important for a 3D-Printer: It must be rigid, and all angles must be exactly 90 degrees. For lengths up to 30 cm the makerbeam seems rigid enough, although in the end I found that if you lift the bottom frame at one end it still deforms slightly. By using only the pre-cut length pieces I made sure all angles 90 degrees and all guides are exactly parallel .

This is the basic frame. Although over time many things have adde and modified, this part has remained basically unchanged.

Fixing the vertical rods,both at the bottom and at the top.
Mounted the Y-Axis stepper motor on a piece of Aluminium L-profile. A frame made from 4 pieces of 100 mm  is used as the carrier. Four ball bearings on the side, four on the front to carry the Y-Axis sliders.
The Y-Axis slider is assembled from two rods and some 100, 50 and 40 mm makerbeams. Note that on the photo's most parts are still assembled using Ty-Raps. Later on I replaced most of these with hose clamps, but during the build and test phase this is more flexible.
The print bed will be placed on a frame made from two rods and some 100mm makerbeam pieces. I mounted a piece of 40mm beam to the front of the steppermotor and two 10mm ball bearings to that. 

 The Z-Axis motor is placed in the corner, and fixed using one long hose-clamp.

Basic setup, with some electronics to test if all motors run and if it all moves as expected...