Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Tip
titleOops!

Before you can go on, you need to install Python:

  • Download Python 2.7.x from https://www.python.org/ (NOT Python 3!)

    Warning

    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:

    Code Block
    languagebash
    C:\Users\Thomas>python --version
    Python 2.7.109
  • Install pywin32, an extension for WIndows. You will need it to interact with the TAP virtual interface
  • Install the OpenWSN Python dependencies (from the openwsn-sw\ directory on your Desktop):

    Code Block
    languagebash
    C:\Users\Thomas\Desktop\openwsn-sw> pip install -r requirements.txt
  • Install SCons, the build environment:

    Code Block
    languagebash
    C:\Users\Thomas\Desktop\openwsn-sw> pip install --egg scons

...

Expand
titleclick here for full output...

 

 

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\firmware\openos\projects\common\oos_openwsn.pydno 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 you machine.

Tip
titleOops!

Before you can go on, you need to install a TAP virtual interface:

Start a simulation:

Code Block
languagebash
Code Block
C:\Users\Thomas\Desktop\openwsn-fw>scons board=python toolchain=gcc oos_openwsn
scons: Reading SConscript files ...
 ___                 _ _ _  ___  _ _
| . | ___  ___ ._ _ | | | |/ __>| \ |
| | || . \/ ._>| ' || | | |\__ \|   |
`___'|  _/\___.|_|_||__/_/ <___/|_\_|
     |_|                  openwsn.org
scons: done reading SConscript files.
scons: Building targets ...
Objectifying       build\python_gcc\projects\common\03oos_openwsn\03oos_openwsn.c -> 03oos_openwsn_obj.c
Objectifying       build\python_gcc\bsp\boards\board.h -> board_obj.h
Objectifying       build\python_gcc\inc\opendefs.h -> opendefs_obj.h
Objectifying       build\python_gcc\openstack\openstack.h -> openstack_obj.h
Objectifying       build\python_gcc\kernel\scheduler.h -> scheduler_obj.h
Objectifying       build\python_gcc\openstack\02a-MAClow\adaptive_sync.h -> adaptive_sync_obj.h
Objectifying       build\python_gcc\openapps\c6t\c6t.h -> c6t_obj.h
Objectifying       build\python_gcc\openapps\cexample\cexample.h -> cexample_obj.h
Objectifying       build\python_gcc\openapps\cinfo\cinfo.h -> cinfo_obj.h
Objectifying       build\python_gcc\openapps\cleds\cleds.h -> cleds_obj.h
Objectifying       build\python_gcc\openapps\cstorm\cstorm.h -> cstorm_obj.h
Objectifying       build\python_gcc\openapps\cwellknown\cwellknown.h -> cwellknown_obj.h
Objectifying       build\python_gcc\openstack\03b-IPv6\icmpv6echo.h -> icmpv6echo_obj.h
Objectifying       build\python_gcc\openstack\03b-IPv6\icmpv6rpl.h -> icmpv6rpl_obj.h
Objectifying       build\python_gcc\openstack\cross-layers\idmanager.h -> idmanager_obj.h
Objectifying       build\python_gcc\openstack\02a-MAClow\IEEE802154E.h -> IEEE802154E_obj.h
Objectifying       build\python_gcc\openstack\02b-MAChigh\neighbors.h -> neighbors_obj.h
Objectifying       build\python_gcc\openstack\04-TRAN\opencoap.h -> opencoap_obj.h
Objectifying       build\python_gcc\openstack\cross-layers\openqueue.h -> openqueue_obj.h
Objectifying       build\python_gcc\openstack\cross-layers\openrandom.h -> openrandom_obj.h
Objectifying       build\python_gcc\drivers\common\openserial.h -> openserial_obj.h
Objectifying       build\python_gcc\openstack\04-TRAN\opentcp.h -> opentcp_obj.h
Objectifying       build\python_gcc\drivers\common\opentimers.h -> opentimers_obj.h
Objectifying       build\python_gcc\openstack\02b-MAChigh\processIE.h -> processIE_obj.h
Objectifying       build\python_gcc\openapps\rrt\rrt.h -> rrt_obj.h
Objectifying       build\python_gcc\openstack\02b-MAChigh\schedule.h -> schedule_obj.h
Objectifying       build\python_gcc\openstack\02b-MAChigh\sixtop.h -> sixtop_obj.h
Objectifying       build\python_gcc\openapps\techo\techo.h -> techo_obj.h
Objectifying       build\python_gcc\openapps\uecho\uecho.h -> uecho_obj.h
Objectifying       build\python_gcc\openstack\02a-MAClow\IEEE802154.h -> IEEE802154_obj.h
Compiling (shared) build\python_gcc\projects\common\03oos_openwsn\03oos_openwsn_obj.o
Copy("build\python_gcc\projects\common\03oos_openwsn\openwsnmodule.c", "bsp\boards\python\openwsnmodule.c")
Objectifying       build\python_gcc\projects\common\03oos_openwsn\openwsnmodule.c -> openwsnmodule_obj.c
Objectifying       build\python_gcc\bsp\boards\bsp_timer.h -> bsp_timer_obj.h
Compiling (shared) build\python_gcc\projects\common\03oos_openwsn\openwsnmodule_obj.o
Objectifying       build\python_gcc\openstack\openstack.c -> openstack_obj.c
Objectifying       build\python_gcc\openstack\03b-IPv6\forwarding.h -> forwarding_obj.h
Objectifying       build\python_gcc\openstack\03b-IPv6\icmpv6.h -> icmpv6_obj.h
Objectifying       build\python_gcc\openstack\03a-IPHC\iphc.h -> iphc_obj.h
Objectifying       build\python_gcc\openapps\openapps.h -> openapps_obj.h
Objectifying       build\python_gcc\openstack\03a-IPHC\openbridge.h -> openbridge_obj.h
Objectifying       build\python_gcc\openstack\04-TRAN\openudp.h -> openudp_obj.h
Compiling          build\python_gcc\openstack\openstack_obj.o
Objectifying       build\python_gcc\openstack\02a-MAClow\topology.c -> topology_obj.c
Objectifying       build\python_gcc\openstack\02a-MAClow\topology.h -> topology_obj.h
Compiling          build\python_gcc\openstack\02a-MAClow\topology_obj.o
Objectifying       build\python_gcc\openstack\02a-MAClow\IEEE802154.c -> IEEE802154_obj.c
Objectifying       build\python_gcc\openstack\cross-layers\packetfunctions.h -> packetfunctions_obj.h
Compiling          build\python_gcc\openstack\02a-MAClow\IEEE802154_obj.o
Objectifying       build\python_gcc\openstack\02a-MAClow\IEEE802154E.c -> IEEE802154E_obj.c
Objectifying       build\python_gcc\bsp\boards\debugpins.h -> debugpins_obj.h
Objectifying       build\python_gcc\bsp\boards\leds.h -> leds_obj.h
Objectifying       build\python_gcc\bsp\boards\radiotimer.h -> radiotimer_obj.h
Objectifying       build\python_gcc\bsp\boards\radio.h -> radio_obj.h
Compiling          build\python_gcc\openstack\02a-MAClow\IEEE802154E_obj.o
Objectifying       build\python_gcc\openstack\02a-MAClow\adaptive_sync.c -> adaptive_sync_obj.c
Compiling          build\python_gcc\openstack\02a-MAClow\adaptive_sync_obj.o
Objectifying       build\python_gcc\openstack\02b-MAChigh\neighbors.c -> neighbors_obj.c
Compiling          build\python_gcc\openstack\02b-MAChigh\neighbors_obj.o
Objectifying       build\python_gcc\openstack\02b-MAChigh\otf.c -> otf_obj.c
Objectifying       build\python_gcc\openstack\02b-MAChigh\otf.h -> otf_obj.h
Compiling          build\python_gcc\openstack\02b-MAChigh\otf_obj.o
Objectifying       build\python_gcc\openstack\02b-MAChigh\processIE.c -> processIE_obj.c
Compiling          build\python_gcc\openstack\02b-MAChigh\processIE_obj.o
Objectifying       build\python_gcc\openstack\02b-MAChigh\schedule.c -> schedule_obj.c
Compiling          build\python_gcc\openstack\02b-MAChigh\schedule_obj.o
Objectifying       build\python_gcc\openstack\02b-MAChigh\sixtop.c -> sixtop_obj.c
Compiling          build\python_gcc\openstack\02b-MAChigh\sixtop_obj.o
Objectifying       build\python_gcc\openstack\03a-IPHC\iphc.c -> iphc_obj.c
Compiling          build\python_gcc\openstack\03a-IPHC\iphc_obj.o
Objectifying       build\python_gcc\openstack\03a-IPHC\openbridge.c -> openbridge_obj.c
Compiling          build\python_gcc\openstack\03a-IPHC\openbridge_obj.o
Objectifying       build\python_gcc\openstack\03b-IPv6\forwarding.c -> forwarding_obj.c
Compiling          build\python_gcc\openstack\03b-IPv6\forwarding_obj.o
Objectifying       build\python_gcc\openstack\03b-IPv6\icmpv6.c -> icmpv6_obj.c
Compiling          build\python_gcc\openstack\03b-IPv6\icmpv6_obj.o
Objectifying       build\python_gcc\openstack\03b-IPv6\icmpv6echo.c -> icmpv6echo_obj.c
Compiling          build\python_gcc\openstack\03b-IPv6\icmpv6echo_obj.o
Objectifying       build\python_gcc\openstack\03b-IPv6\icmpv6rpl.c -> icmpv6rpl_obj.c
Compiling          build\python_gcc\openstack\03b-IPv6\icmpv6rpl_obj.o
Objectifying       build\python_gcc\openstack\04-TRAN\opencoap.c -> opencoap_obj.c
Compiling          build\python_gcc\openstack\04-TRAN\opencoap_obj.o
Objectifying       build\python_gcc\openstack\04-TRAN\opentcp.c -> opentcp_obj.c
Compiling          build\python_gcc\openstack\04-TRAN\opentcp_obj.o
Objectifying       build\python_gcc\openstack\04-TRAN\openudp.c -> openudp_obj.c
Objectifying       build\python_gcc\openapps\uinject\uinject.h -> uinject_obj.h
Compiling          build\python_gcc\openstack\04-TRAN\openudp_obj.o
Objectifying       build\python_gcc\openstack\cross-layers\idmanager.c -> idmanager_obj.c
Objectifying       build\python_gcc\bsp\boards\eui64.h -> eui64_obj.h
Compiling          build\python_gcc\openstack\cross-layers\idmanager_obj.o
Objectifying       build\python_gcc\openstack\cross-layers\openqueue.c -> openqueue_obj.c
Compiling          build\python_gcc\openstack\cross-layers\openqueue_obj.o
Objectifying       build\python_gcc\openstack\cross-layers\openrandom.c -> openrandom_obj.c
Compiling          build\python_gcc\openstack\cross-layers\openrandom_obj.o
Objectifying       build\python_gcc\openstack\cross-layers\packetfunctions.c -> packetfunctions_obj.c
Compiling          build\python_gcc\openstack\cross-layers\packetfunctions_obj.o
Archiving          build\python_gcc\openstack\libopenstack.a
Indexing           build\python_gcc\openstack\libopenstack.a
Objectifying       build\python_gcc\openapps\openapps.c -> openapps_obj.c
Compiling          build\python_gcc\openapps\openapps_obj.o
Objectifying       build\python_gcc\openapps\c6t\c6t.c -> c6t_obj.c
Compiling          build\python_gcc\openapps\c6t\c6t_obj.o
Objectifying       build\python_gcc\openapps\cexample\cexample.c -> cexample_obj.c
Compiling          build\python_gcc\openapps\cexample\cexample_obj.o
Objectifying       build\python_gcc\openapps\cinfo\cinfo.c -> cinfo_obj.c
Compiling          build\python_gcc\openapps\cinfo\cinfo_obj.o
Objectifying       build\python_gcc\openapps\cleds\cleds.c -> cleds_obj.c
Compiling          build\python_gcc\openapps\cleds\cleds_obj.o
Objectifying       build\python_gcc\openapps\cstorm\cstorm.c -> cstorm_obj.c
Compiling          build\python_gcc\openapps\cstorm\cstorm_obj.o
Objectifying       build\python_gcc\openapps\cwellknown\cwellknown.c -> cwellknown_obj.c
Compiling          build\python_gcc\openapps\cwellknown\cwellknown_obj.o
Objectifying       build\python_gcc\openapps\rrt\rrt.c -> rrt_obj.c
Compiling          build\python_gcc\openapps\rrt\rrt_obj.o
Objectifying       build\python_gcc\openapps\techo\techo.c -> techo_obj.c
Compiling          build\python_gcc\openapps\techo\techo_obj.o
Objectifying       build\python_gcc\openapps\uecho\uecho.c -> uecho_obj.c
Compiling          build\python_gcc\openapps\uecho\uecho_obj.o
Objectifying       build\python_gcc\openapps\uinject\uinject.c -> uinject_obj.c
Compiling          build\python_gcc\openapps\uinject\uinject_obj.o
Archiving          build\python_gcc\openapps\libopenapps.a
Indexing           build\python_gcc\openapps\libopenapps.a
Objectifying       build\python_gcc\kernel\openos\scheduler.c -> scheduler_obj.c
Compiling          build\python_gcc\kernel\openos\scheduler_obj.o
Archiving          build\python_gcc\kernel\openos\libkernel.a
Indexing           build\python_gcc\kernel\openos\libkernel.a
Objectifying       build\python_gcc\drivers\common\openhdlc.c -> openhdlc_obj.c
Objectifying       build\python_gcc\drivers\common\openhdlc.h -> openhdlc_obj.h
Compiling          build\python_gcc\drivers\common\openhdlc_obj.o
Objectifying       build\python_gcc\drivers\common\opensensors.c -> opensensors_obj.c
Objectifying       build\python_gcc\drivers\common\opensensors.h -> opensensors_obj.h
Compiling          build\python_gcc\drivers\common\opensensors_obj.o
Objectifying       build\python_gcc\drivers\common\openserial.c -> openserial_obj.c
Objectifying       build\python_gcc\bsp\boards\uart.h -> uart_obj.h
Compiling          build\python_gcc\drivers\common\openserial_obj.o
Objectifying       build\python_gcc\drivers\common\opentimers.c -> opentimers_obj.c
Compiling          build\python_gcc\drivers\common\opentimers_obj.o
Archiving          build\python_gcc\drivers\libdrivers.a
Indexing           build\python_gcc\drivers\libdrivers.a
Compiling          build\python_gcc\bsp\boards\python\board_obj.o
Compiling          build\python_gcc\bsp\boards\python\bsp_timer_obj.o
Compiling          build\python_gcc\bsp\boards\python\debugpins_obj.o
Compiling          build\python_gcc\bsp\boards\python\eui64_obj.o
Compiling          build\python_gcc\bsp\boards\python\leds_obj.o
Compiling          build\python_gcc\bsp\boards\python\radio_obj.o
Compiling          build\python_gcc\bsp\boards\python\radiotimer_obj.o
Compiling          build\python_gcc\bsp\boards\python\uart_obj.o
Compiling          build\python_gcc\bsp\boards\python\supply_obj.o
Compiling          build\python_gcc\bsp\boards\common\aes_cbc.o
Compiling          build\python_gcc\bsp\boards\common\aes_ccms.o
Compiling          build\python_gcc\bsp\boards\common\aes_ctr.o
Compiling          build\python_gcc\bsp\boards\common\aes_ecb.o
Compiling          build\python_gcc\bsp\boards\common\firmware_crypto_engine.o
Compiling          build\python_gcc\bsp\boards\common\dummy_crypto_engine.o
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\03oos_openwsn\03oos_openwsn_obj.o build\pyt
hon_gcc\projects\common\03oos_openwsn\openwsnmodule_obj.o -LC:\Python27\libs -Lbuild\python_gcc\bsp\boards -Lbuild\python_gcc\kernel\openos
-Lbuild\python_gcc\drivers -Lbuild\python_gcc\openstack -Lbuild\python_gcc\openapps -lopenstack -lopenapps -lkernel -ldrivers -lbsp -lpython
27 -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.pydno 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 you machine.

Tip
titleOops!

Before you can go on, you need to install a TAP virtual interface:

Start a simulation:

Code Block
languagebash
C:\Users\Thomas\Desktop\openwsn-sw\software\openvisualizer>scons runweb --sim
scons: Reading SConscript files ...
 ___                 _ _ _  ___  _ _
| . | ___  ___ ._ _ | | | |/ __>| \ |
| | || . \/ ._>| ' || | | |\__ \|   |
`___'|  _/\___.|_|_||__/_/ <___/|_\_|
     |_|                  openwsn.org
scons: done reading SConscript files.
scons: Building targets ...
Copy("bin\openVisualizerApp\sim_files", "..\..\..\openwsn-fw\bsp\boards\python\openwsnmodule_obj.h")
Mkdir("bin\openVisualizerApp\sim_files\windows")
Copy("bin\openVisualizerApp\sim_files\windows\oos_openwsn-x86.pyd", "..\..\..\openwsn-fw\build\python_gcc\projects\common\oos_openwsn.pyd")
Copy("bin\openVisualizerApp\sim_files", "..\..\..\openwsn-fw\build\python_gcc\projects\common\oos_openwsn.pyd")
Mkdir("C:\Users\Thomas\Desktop\openwsn-sw\software\openvisualizer\build\runui")
Copy("build\runui\openvisualizer.conf", "bin\openVisualizerApp\openvisualizer.conf")
Mkdir("C:\Users\Thomas\Desktop\openwsn-sw\software\openvisualizer\build\runui")
Copy("build\runui\logging.conf", "bin\openVisualizerApp\logging.conf")
Mkdir("C:\Users\Thomas\Desktop\openwsn-sw\software\openvisualizer>scons runweb --sim
scons: Reading SConscript files ...
 ___                 _ _ _  ___  _ _
| . | ___  ___ ._ _ | | | |/ __>| \ |
| | || . \/ ._>| ' || | | |\__ \|   |
`___'|  _/\___.|_|_||__/_/ <___/|_\_|
     |_|                  openwsn.org
scons: done reading SConscript files.
scons: Building targets ...
Copy("bin\openVisualizerApp\sim_files", "..\..\..\openwsn-fw\firmware\openos\bsp\boards\python\openwsnmodule_obj.h")
Mkdir("bin\openVisualizerApp\sim_files\windows")
Copy("bin\openVisualizerApp\sim_files\windows\oos_openwsn-x86.pyd", "..\..\..\openwsn-fw\firmware\openos\projects\common
\oos_openwsn.pyd")
Copy("bin\openVisualizerApp\sim_files", "..\..\..\openwsn-fw\firmware\openos\projects\common\oos_openwsn.pyd")
Delete("build\runui\web_files")
Mkdir("C:\Users\Thomas\Desktop\openwsn-sw\software\openvisualizer\build\runui")
Copy("build\runui\web_files", "bin\openVisualizerApp\web_files")
Delete("build\runui\sim_files")
Mkdir("C:\Users\Thomas\Desktop\openwsn-sw\software\openvisualizer\build\runui")
Copy("build\runui\sim_files", "bin\openVisualizerApp\sim_files")
uiRunner(["bin\openVisualizerApp\openVisualizerWeb"], ["bin\openVisualizerApp\openVisualizerWeb.py"])
Child PID is 2692
scons: done building targets.openvisualizer\build\runui")
Copy("build\runui\trace.conf", "bin\openVisualizerApp\trace.conf")
Delete("build\runui\web_files")
Mkdir("C:\Users\Thomas\Desktop\openwsn-sw\software\openvisualizer\build\runui")
Copy("build\runui\web_files", "bin\openVisualizerApp\web_files")
Delete("build\runui\sim_files")
Mkdir("C:\Users\Thomas\Desktop\openwsn-sw\software\openvisualizer\build\runui")
Copy("build\runui\sim_files", "bin\openVisualizerApp\sim_files")
uiRunner(["bin\openVisualizerApp\openVisualizerWeb"], ["bin\openVisualizerApp\openVisualizerWeb.py"])
13:09:22 INFO create instance
13:09:22 INFO create instance
13:09:22 INFO create instance
13:09:22 INFO create instance
13:09:22 INFO create instance
13:09:22 INFO create instance
13:09:22 INFO create instance
13:09:22 INFO create instance
13:09:22 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!Note 

Info

As SCons on Windows can be run with scons.bat, you can launch the simulation on another window with the following command :

C:\Users\Thomas\Desktop\openwsn-sw\software\openvisualizer>start cmd.exe /k "scons.bat" runweb --sim
Closing SCons window will kill the simulation.

Now, open http://127.0.0.1:8080/ to see the web interface of OpenWSN.

Image RemovedImage Added

Open the "Topology" tab:

...

Set up the topology to have a chain 1-2-3, and set each PDR to 1.

Image RemovedImage Added

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). You can select other motes and see that they quickly become "Synchronized!".

Congratulations, you have built your first OpenWSN simulated network!

...

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").

Image RemovedImage Added

Open a new command prompt to ping mote 2:

Code Block
languagebash
C:\Users\Thomas>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

...