This page is presented as a demo. Since it has no hardware dependency, you can easily replicate it on your computer. |
This demo shows how easy it is to write an application to interact with an OpenWSN mote, from your computer, over CoAP. We will use the following:
We start by cloning the 3 repositories side-by-side.
The next step is to build the firmware as a Python extension module so it can be simulated:
C:\Users\Thomas\Desktop\openwsn-fw>scons board=python toolchain=gcc oos_openwsn scons: Reading SConscript files ... ___ _ _ _ ___ _ _ | . | ___ ___ ._ _ | | | |/ __>| \ | | | || . \/ ._>| ' || | | |\__ \| | `___'| _/\___.|_|_||__/_/ <___/|_\_| |_| openwsn.org [...] scons: done building targets. |
We can now start the OpenVisualizer application in simulation mode, with a web interface:
C:\Users\Thomas\Desktop\openwsn-sw\software\openvisualizer>scons runweb --sim --simCount=2 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 5460 scons: done building targets. |
Open http://127.0.0.1:8080/ shows the web interface of the OpenVisualizer.
Start by editing the topology so the two nodes are connected through a perfect wireless link (PDR=1).
You can now click the "Toggle" button so mote 1 becomes the DAGroot of the network. Mote 2 will synchronize to it, and RPL will set up the routing structure.
To verify connectivity, you can ping mote 2
This page was put together using a Windows computer. If you're using Linux, everything is exactly the same, but you need to use command |
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=50ms Reply from bbbb::1415:92cc:0:2: time=67ms Reply from bbbb::1415:92cc:0:2: time=65ms Reply from bbbb::1415:92cc:0:2: time=59ms 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 = 50ms, Maximum = 67ms, Average = 60ms |
By default, mote 2 is a CoAP endpoint. To see the resources it has, you can install the Copper plugin for Firefox and navigate to the coap://[bbbb::1415:92cc:0:2]:5683/.well-known/core
URI.
Alternatively, you can create a Python script which uses the Python CoAP module you just clones:
from coap import coap c = coap.coap() p = c.GET('coap://bbbb::1415:92cc:0:2/.well-known/core') print ''.join([chr(b) for b in p]) |
Running is prints the same information
</6t>,</.well-known/core>,</l>,</i> |
Doing a CoAP GET
on /i
resource gives you information about the board itself, including the firmware version, the micro-controller and radio used. Since the mote is emulation, it returns "Python" for latter.
You can also interact with the debug LED of the mote. This is done through the /l
CoAP resource:
GET
indicates what state it is inPUT
allows you to set (1
), clear (0
) or toggle it (2
)The following script toggles the LED and verifies that its value has indeed changed:
from coap import coap c = coap.coap() p = c.GET('coap://[bbbb::1415:92cc:0:2]/l') print chr(p[0]) c.PUT( 'coap://[bbbb::1415:92cc:0:2]/l', payload = [ord('2')], ) p = c.GET('coap://[bbbb::1415:92cc:0:2]/l') print chr(p[0]) |
Running it shows that the LED was first OFF, then ON.
0 1 |
Follow the Adding a CoAP app tutorial to add your own app.