Kickstart Windows
If you are completely new to OpenWSN, and you are using Windows, read this page first. It will walk you through all the steps to install OpenWSN and explore a number of key features.
In particular you will:
- compile and run OpenWSN in simulation mode, ping a simulated mote, and interact with it over CoAP.
- program a TelosB mote, connect it to your computer, ping it, and interact with it over CoAP.
What to bring?
- a computer running Windows. This page is written with Windows 7 Professional.
- optionally, two TelosB motes to play with real hardware.
At the time of writing, we are using the latest and greatest of all software. Undoubtedly, this will become outdated very fast. If you see something out of the date, take action! Send an e-mail to Tengfei Chang or Thomas Watteyne to get this page update. Thanks!
During this tutorial, you will be installing a number of tools (python, pywin32, mingw). We recommend you install the 32-bit version of all of these tools, even you have a 64-bit machine.
Download OpenWSN
OpenWSN is a collection of repositories hosted on GitHub. We will download and use the following:
- https://github.com/openwsn-berkeley/openwsn-fw holds the firmware source code which runs on the (possibly emulated) motes
- https://github.com/openwsn-berkeley/openvisualizer holds the software source code which runs on your computer
- https://github.com/openwsn-berkeley/coap is a Python module which implements CoAP
Oops!
Before you can go on, you need to install a Git client. Any client will do, but we will use tortoisegit.
Once you've installed it, it will integrate nicely with your Windows explorer.
We will download these repositories side-by-side on your desktop using Git:
- right-click on your Desktop, select TortoiseGit > Clone... .
- In the URL, enter https://github.com/openwsn-berkeley/openwsn-fw.git
- repeat for the following URLs:
You now have:
At any time you can make sure you are running the latest code by right-clicking on each folder, and choosing Git Pull....
Running a simulation
Frankly, it's a bit strange to start using OpenWSN with a simulation, since the firmware is really meant (and written) to run on real motes. But, not everyone has hardware, not always the same hardware, etc. So to make things nice and easy, we'll start by simulation. Oh, and the simulated code behaves exactly the same as the real code, so what you see now is what you'll get with real hardware.
Prepare
Before we can start running a simulation, we need to compile the firmware as a Python extension. This is all explained in the OpenSim page if you want to know what's going on.
Oops!
Before you can go on, you need to install mingw
, which gives you all of the build tools to build the firmware:
Download from http://www.mingw.org/
If you're as lazy as we are, you can just follow the "Looking for the latest version? Download mingw-get-setup.exe" link at the top of http://sourceforge.net/projects/mingw/files/.
- Use the following installation options:
- Install at
C:\MingGW\
- Mark the following packages for installation:
ming32-base
msys-base
- Select "Installation > Apply Changes" to download and install those packages. This will download and install the packages.
- Install at
- Add
C:\MinGW\bin
to yourPATH
environment variable Verify you can call the
gcc
command:C:\Users\Tengfei>gcc --version gcc (GCC) 4.8.1 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Oops!
Before you can go on, you need to install Python:
Download Python 2.7.x from https://www.python.org/ (NOT Python 3!)
At the time of writing, Python 2.7.10 was just released. It doesn't work for compiling the OpenWSN code in emulation mode, for the reasons detailed in http://comments.gmane.org/gmane.comp.python.cython.user/13394.
At the time of writing, we recommend you use Python 2.7.9.
Let's hope Python 2.7.11 fixes this bug. If you read this and Python 2.7.11 was already released and works, please edit this page, or leave a comment at the bottom.
- Add the following directories to your
PATH
environment variable:C:\Python27
C:\Python27\Scripts
Verify you can call
python
:C:\Users\Tengfei>python --version Python 2.7.9
- Install
pywin32
, an extension for Windows. You will need it to interact with the TAP virtual interfaceDownload from http://sourceforge.net/projects/pywin32/
We installed
pywin32-219.win32-py2.7.exe
.- Install with default options
- Install the Microsoft Visual C++ for Windows. You will need it to compile the yappi module which will be installed with pip at next
Download from http://aka.ms/vcpython27
We installed VCForPython27.msi
- install with default options
Install the OpenWSN Python dependencies (from the openvisualizer
\
and coap\
directory on your Desktop):C:\Users\Tengfei\Desktop\openvisualizer> pip install -r requirements.txt C:\Users\Tengfei\Desktop\coap> pip install -r requirements.txt
Install SCons, the build environment:
C:\Users\Tengfei\Desktop\openvisualizer> pip install --egg scons
If you have any problem with the installation of SCons, try the following command
pip install --index-url=http://pypi.python.org/simple --trusted-host pypi.python.org --egg scons
To compile the firmware as a Python extension module, type:
C:\Users\Tengfei\Desktop\openwsn-fw>scons board=python toolchain=gcc oos_openwsn scons: Reading SConscript files ... ___ _ _ _ ___ _ _ | . | ___ ___ ._ _ | | | |/ __>| \ | | | || . \/ ._>| ' || | | |\__ \| | `___'| _/\___.|_|_||__/_/ <___/|_\_| |_| openwsn.org [...] Archiving build\python_gcc\bsp\boards\libbsp.a Indexing build\python_gcc\bsp\boards\libbsp.a gcc -shared -o build\python_gcc\projects\common\oos_openwsn.pyd build\python_gcc\projects\common\03o os_openwsn\03oos_openwsn_obj.o build\python_gcc\projects\common\03oos_openwsn\openwsnmodule_obj.o -L C:\Python27\libs -Lbuild\python_gcc\bsp\boards -Lbuild\python_gcc\kernel\openos -Lbuild\python_gcc\d rivers -Lbuild\python_gcc\openstack -Lbuild\python_gcc\openapps -lopenstack -lopenapps -lkernel -ldr ivers -lbsp -lpython27 -Wl,--out-implib,build\python_gcc\projects\common\liboos_openwsn.a scons: done building targets.
This step compile the complete OpenWSN firmware as a Python extension module (a form of shared library) which the simulation environment can import at run-time.
The extension module is at openwsn-fw\build\python_gcc\projects\common\oos_openwsn.pyd
, no need to move it.
Simulate
You can now start a simulation. Running a simulation just means taking the usual software which runs on your computer (and call "openvisualizer"), but running it in simulation mode. That is, instead of the openvisualizer connecting to real motes, it connects to emulated mote code actually running on your machine.
Oops!
Before you can go on, you need to install a TAP virtual interface:
- Follow Install tun
- Follow Configure tun
Start a simulation:
C:\Users\Tengfei\Desktop\openvisualizer>scons runweb --sim scons: Reading SConscript files ... ___ _ _ _ ___ _ _ | . | ___ ___ ._ _ | | | |/ __>| \ | | | || . \/ ._>| ' || | | |\__ \| | `___'| _/\___.|_|_||__/_/ <___/|_\_| |_| openwsn.org scons: done reading SConscript files. scons: Building targets ... Copy("bin\sim_files", "..\openwsn-fw\bsp\boards\python\openwsnmodule_obj.h") Mkdir("bin\sim_files\windows") Copy("bin\sim_files\windows\oos_openwsn-x86.pyd", "..\openwsn-fw\build\python_gcc\projects\common\oos_openwsn.pyd") Copy("bin\sim_files", "..\openwsn-fw\build\python_gcc\projects\common\oos_openwsn.pyd") Delete("build\runui\web_files") Mkdir("C:\Users\Tengfei\Desktop\openvisualizer\build\runui") Copy("build\runui\web_files", "bin\web_files") Delete("build\runui\sim_files") Mkdir("C:\Users\Tengfei\Desktop\openvisualizer\build\runui") Copy("build\runui\sim_files", "bin\sim_files") uiRunner(["bin\openVisualizerWeb"], ["bin\openVisualizerWeb.py"]) 10:46:15 INFO create instance 10:46:15 INFO create instance 10:46:15 INFO create instance 10:46:15 INFO create instance 10:46:15 INFO create instance 10:46:15 INFO create instance 10:46:15 INFO create instance 10:46:15 INFO create instance 10:46:15 INFO create instance 13:09:22 INFO 3 [OPENWSN] booted OpenVisualizer web interface started at 0.0.0.0: 8080 enter 'q' to exit > 13:09:22 INFO 2 [OPENWSN] booted 13:09:22 INFO 1 [OPENWSN] booted
That's it, an OpenWSN simulation is now running your computer!
As SCons on Windows can be run with scons.bat, you can launch the simulation on another window with the following command :
C:\Users\Tengfei\Desktop\openvisualizer>start cmd.exe /k "scons.bat" runweb --sim
Now, open http://127.0.0.1:8080/ to see the web interface of OpenWSN.
Open the "Topology" tab:
- left click on a mote to move it around
right-click on two motes to connect them with a wireless link
You need to right-click on the red balloon, not the blue rectangle. Confusing, right?
Also, to create a link, you need to right-click on both endpoints.
- left-click on a link to change its PDR (packet delivery ratio)
Set up the topology to have a chain 1-2-3, and set each PDR to 1.
Back in the "Motes" tab, select mote 0001
and click on the "Toggle" button. You just declare mote 1 to be the root of your network (the DAGroot in RPL parlance, the sink in WSN parlance, the gateway, etc).
Congratulations, you have built your first OpenWSN simulated network!
Ping a mote
By convention (i.e. this is hard-coded in the software), the IPv6 prefix of the simulated network is bbbb:/64
. This means that the IPv6 address of each mote will start with "bbbb::
". The remainder of a mote's IPv6 address is it's MAC address (or EUI-64). You can read this in the web interface (under "EUI-64").
Open a new command prompt to ping mote 2:
C:\Users\Tengfei>ping bbbb::1415:92cc:0:2 Pinging bbbb::1415:92cc:0:2 with 32 bytes of data: Reply from bbbb::1415:92cc:0:2: time=101ms Reply from bbbb::1415:92cc:0:2: time=67ms Reply from bbbb::1415:92cc:0:2: time=97ms Reply from bbbb::1415:92cc:0:2: time=91ms Ping statistics for bbbb::1415:92cc:0:2: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 67ms, Maximum = 101ms, Average = 89ms
You can also ping mote 3 which is 3 hops away:
C:\Users\Tengfei>ping bbbb::1415:92cc:0:3 Pinging bbbb::1415:92cc:0:3 with 32 bytes of data: Reply from bbbb::1415:92cc:0:3: time=206ms Reply from bbbb::1415:92cc:0:3: time=95ms Reply from bbbb::1415:92cc:0:3: time=153ms Reply from bbbb::1415:92cc:0:3: time=76ms Ping statistics for bbbb::1415:92cc:0:3: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 76ms, Maximum = 206ms, Average = 132ms
Interact over CoAP
CoAP is a protocol implement on each OpenWSN device, which makes it appear like a web server on the Internet.
By default, an OpenWSN mote implements a CoAP "info" resource which indicate what version of the code is running. You can test that by running the Python test script provided in the firmware:
C:\Users\Tengfei\Desktop\openwsn-fw\openapps\cinfo OpenWSN 1.4.1 Python Python Python Done. Press enter to close.
Debugging with Wireshark
In simulation mode, the openvisualizer takes care of simulating the wireless medium. You can use Wireshark to take a peek at what goes over this simulated radio space.
Oops!
Before you can go on, you need to install Wireshark 6TiSCH dissectors:
- Download 32bit/64bit version from https://www.wireshark.org/download/automated/
- Install with default settings
Start Wireshark (run as administrator) on the OpenWSN
interface at address, and configure the filtering for zep
(the ZigBee encapsulation protocol).
You now see all the packets exchanged over the simulated radio environment, exciting!
You may not able to see the 6LoWPAN packet in your Wireshark, then you need to configure Wireshark to decode it. Choose one packet in your wireshark and right click to choose "Decode As".
In the prompt window, Choose 6LoWPAN protocol on the Current column.
Click "OK" to close the window and do a "Reload" or press "Ctrl+R" to reload current setting. After this operation, you will see the 6LoWPAN packets.
You also need to configure the Wireshark to tell which IPv6 prefix is the network is using. In packet detail content, right click the 6LoWPAN dissect area and choose "Protocol Perference" → "Open 6LoWPAN Perference".
Type bbbb::/64 in the Context 0 textbox to indicate the prefix is using bbbb::, and click OK to close the window. A "Reload" Operation is also required.
Here is an example pcap file of openwsn simulation network with three motes: example.
Closing the OpenVisualizer
In the command prompt from where you started the OpenVisualizer, type quit
to close it
Now with real hardware
User experience with real hardware is identical than when using the simulator. Because it is a popular platform, we will use the TelosB mote, although any other supported hardware platform can be used instead.
Connecting the boards
Oops!
Before you can go on, you need to install the FTDI driver for your TelosB board
- download the VCP drivers from http://www.ftdichip.com/
- install with default settings
When connecting a TelosB board, Windows assigns it a COM port. You can see which in the Device Manager:
Compiling/Loading firmware
Oops!
Before you can go on, you need to install mspgcc
toolchain:
Download the latest version from http://sourceforge.net/projects/mspgcc/files/Windows/mingw32/. At the time of writing,
mspgcc-20120406-p20120911.zip
.Unzip somewhere on your computer. We recommend
C:\mspgcc\mspgcc-20120406-p20120911
.- Add
C:\mspgcc\mspgcc-20120406-p20120911\bin\
to yourPATH
environment variable
The build environment allow you to build the firmware and load is on all your boards with a single command (how cool is that?):
C:\Users\Tengfei\Desktop\openwsn-fw>scons board=telosb toolchain=mspgcc bootload=COM4,COM5,COM6 oos_openwsn scons: Reading SConscript files ... ___ _ _ _ ___ _ _ | . | ___ ___ ._ _ | | | |/ __>| \ | | | || . \/ ._>| ' || | | |\__ \| | `___'| _/\___.|_|_||__/_/ <___/|_\_| |_| openwsn.org scons: done reading SConscript files. scons: Building targets ... [...] Linking firmware\openos\projects\common\03oos_openwsn_prog.exe msp430-size firmware\openos\projects\common\03oos_openwsn_prog.exe text data bss dec hex filename 43156 0 4006 47162 b83a firmware\openos\projects\common\03oos_openwsn_prog.exe msp430-objcopy --output-target=ihex firmware\openos\projects\common\03oos_openwsn_prog.exe firmware\openos\projects\comm on\03oos_openwsn_prog.ihex msp430-objcopy --output-target=binary firmware\openos\projects\common\03oos_openwsn_prog.exe firmware\openos\projects\co mmon\03oos_openwsn_prog.bin telosb_bootload(["firmware\openos\projects\common\03oos_openwsn_prog.phonyupload"], ["firmware\openos\projects\common\03 oos_openwsn_prog.ihex"]) starting bootloading on COM4 starting bootloading on COM5 starting bootloading on COM6 [...] done bootloading on COM4 done bootloading on COM6 done bootloading on COM5 scons: done building targets.
Start a network
Once the motes are programmed, you have the exact same experience as when running a simulated network.
First, start the OpenVisualizer:
C:\Users\Tengfei\Desktop\openvisualizer>scons runweb scons: Reading SConscript files ... ___ _ _ _ ___ _ _ | . | ___ ___ ._ _ | | | |/ __>| \ | | | || . \/ ._>| ' || | | |\__ \| | `___'| _/\___.|_|_||__/_/ <___/|_\_| |_| openwsn.org scons: done reading SConscript files. scons: Building targets ... Delete("build\runui\web_files") Mkdir("C:\Users\tengfei\Desktop\openwsn\openwsn-sw\software\openvisualizer\build\runui") Copy("build\runui\web_files", "bin\openVisualizerApp\web_files") Delete("build\runui\sim_files") Mkdir("C:\Users\tengfei\Desktop\openwsn\openwsn-sw\software\openvisualizer\build\runui") Copy("build\runui\sim_files", "bin\openVisualizerApp\sim_files") uiRunner(["bin\openVisualizerApp\openVisualizerWeb"], ["bin\openVisualizerApp\openVisualizerWeb.py"] ) OpenVisualizer web interface started at 0.0.0.0: 8080 enter 'q' to exit >
Open http://127.0.0.1:8080/ to see the web interface:
Your TelosB motes turn on their blue LED once synchronized.
Can I see the topology?
Ping a mote
You can ping a mote exactly as you would in the simulator:
C:\Users\Tengfei>ping bbbb::1415:9200:12:e63b Pinging bbbb::1415:9200:12:e63b with 32 bytes of data: Reply from bbbb::1415:9200:12:e63b: time=285ms Reply from bbbb::1415:9200:12:e63b: time=276ms Reply from bbbb::1415:9200:12:e63b: time=437ms Reply from bbbb::1415:9200:12:e63b: time=431ms Ping statistics for bbbb::1415:9200:12:e63b: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 276ms, Maximum = 437ms, Average = 357ms
Interaction over CoAP
You can interact with a mote exactly as you would in the simulator. After modifying the rinfo.py
script to communicate with mote bbbb::1415:9200:12:e63b
:
C:\Users\Tengfei\Desktop\openwsn-fw\openapps\cinfo>python cinfo.py C:\Users\Tengfei\Desktop\openwsn-fw\openapps\cinfo OpenWSN 1.4.1 TelosB MSP430f1611 CC2420 Done. Press enter to close.
What's next?
Congratulations! You've now gone through the trouble of installing all of the tools and pieces of OpenWSN. From now on, it's just fun.
- join the Mailing List.
- asks questions through the questions plugin.
- submit bugs and feature requests through the issue tracker.