Skip to content
maniacbug edited this page Aug 15, 2011 · 24 revisions

Navigation: Home | Scenarios | Installing | Using | Future

Table of Contents

Setup

First, get your system and your nodes set up.

Default avrdude port

Edit Makefile.avr-zigduino, and change the default avrdude port to match your local settings. This only needs to be done once ever.

AVRDUDE_PORT ?= /dev/ttyUSB0

MAC Address / Node Number

Each node needs a unique MAC address. The avr-zigduino platform expects to find the MAC address as the first 8 bytes in EEPROM.

There is a special program just to program the MAC address. It uses the same first 7 bytes, and lets you choose a different number for the last. From this point forward, we will refer to that last digit of the MAC address as the "Node number".

$ cd tools/set-eeprom
$ make NODE=3 AVRDUDE_PORT=/dev/ttyUSB0

Troubleshooting

Second, make sure everything is working.

Hello World

$ cd tests/hello-world
$ make upload
$ make login

Working correctly, you should see this:

connecting to /dev/ttyUSB0 (57600) [OK]
Power-on reset.
External reset!

*******Booting Contiki 2.5*******
MAC address 2:11:22:ff:fe:33:44:3
nullmac sicslowmac, channel 26

IP addresses [4 max]
fdfd::3
fe80::11:22ff:fe33:4403
Hello, world

Ping

Now that we know the node itself is working and printing OK, we want to make sure two nodes can talk. The best way to do this is with a ping.

This requires two nodes. If you already have hello-world on one node, the easiest thing to do is to put ping-ipv6 on a second node, and ping the other. So for this example, say we already have hello-world working on node 3 on /dev/ttyUSB0.

$ cd tests/ping-ipv6
$ make upload AVRDUDE_PORT=/dev/ttyUSB1 NODE=3
$ make login AVRDUDE_PORT=/dev/ttyUSB1

Working correctly, you will see this:

connecting to /dev/ttyUSB1 (57600) [OK]
Power-on reset.
External reset!

*******Booting Contiki 2.5*******
MAC address 2:11:22:ff:fe:33:44:1
nullmac sicslowmac, channel 26
In Process PING6
Wait for DAD

IP addresses [4 max]
fdfd::1
fe80::11:22ff:fe33:4401
Sending Echo Request to fdfd:0000:0000:0000:0000:0000:0000:0003 from fdfd:0000:0000:0000:0000:0000:0000:0001 
Echo reply received.
Sending Echo Request to fdfd:0000:0000:0000:0000:0000:0000:0003 from fdfd:0000:0000:0000:0000:0000:0000:0001 
Echo reply received.
Sending Echo Request to fdfd:0000:0000:0000:0000:0000:0000:0003 from fdfd:0000:0000:0000:0000:0000:0000:0001 
Echo reply received.
Sending Echo Request to fdfd:0000:0000:0000:0000:0000:0000:0003 from fdfd:0000:0000:0000:0000:0000:0000:0001 
Echo reply received.
Sending Echo Request to fdfd:0000:0000:0000:0000:0000:0000:0003 from fdfd:0000:0000:0000:0000:0000:0000:0001 
Echo reply received.
END PING6

UDP

Finally, we will want to be sure that two nodes can exchange real application data between them. We can do so with the UDP client/server test. Again, this requires two nodes. One node contains the server program, the other contains the client. When making the client, we need to tell it where to find the server by specifying NODE= the Node# of the server.

$ cd tests/udp-ipv6
$ make udp-server.avr-zigduino.u AVRDUDE_PORT=/dev/ttyUSB0
$ make udp-client.avr-zigduino.u AVRDUDE_PORT=/dev/ttyUSB1 NODE=3
$ make login AVRDUDE_PORT=/dev/ttyUSB0

Working correctly, you'll see something like the following. The exact numbers will depend on the timing of when you do the 'make login'.

connecting to /dev/ttyUSB0 (57600) [OK]

Power-on reset.
External reset!

*******Booting Contiki 2.5*******
MAC address 2:11:22:ff:fe:33:44:3
nullmac sicslowmac, channel 26

IP addresses [4 max]
fdfd::3
fe80::11:22ff:fe33:4403
UDP server started
Server IPv6 addresses: fdfd::3
fe80::11:22ff:fe33:4403

+READY
Server received: 'Hello 2 from the client' from fdfd::1
Responding with message: Hello from the server! (1)
Server received: 'Hello 3 from the client' from fdfd::1
Responding with message: Hello from the server! (2)
Server received: 'Hello 4 from the client' from fdfd::1
Responding with message: Hello from the server! (3)
Server received: 'Hello 5 from the client' from fdfd::1
Responding with message: Hello from the server! (4)
Server received: 'Hello 6 from the client' from fdfd::1
Responding with message: Hello from the server! (5)
Server received: 'Hello 7 from the client' from fdfd::1
+OK PASS

Shell

The shell is a very powerful feature of Contiki. Within this OS lies a fully-featured command shell. The shell in the avr-zigduino platform is a subset of the full Contiki shell, including only the shell modules which have been proven to work on this platform.

$ cd tests/shell
$ make upload
$ make login

If successful, you'll see this:

connecting to /dev/ttyUSB1 (57600) [OK]

Power-on reset.
External reset!

*******Booting Contiki 2.5*******
MAC address 2:11:22:ff:fe:33:44:1
nullmac sicslowmac, channel 26
Contiki command shell 
Type '?' and return for help 
2.17: Contiki> 
IP addresses [4 max]
fdfd::1
fe80::11:22ff:fe33:4401

help

Now, try some of the commands, like 'help':

Available commands: 
?: shows this help 
binprint: print binary data in decimal format 
blink [num]: blink LEDs ([num] times) 
echo <text>: print <text> 
exit: exit shell 
hd: print binary data in hexadecimal format 
help: shows this help 
kill <command>: stop a specific command 
killall: stop all running commands 
netstat: show UDP and TCP connections 
null: discard input 
ping <host>: ping an IP host 
ps: list all running processes 
quit: exit shell 
randwait <maxtime> <command>: wait for a random time before running a command 
repeat <num> <time> <command>: run a command every <time> seconds 
size: print the size of the input 
time [seconds]: output time in binary format, or set time in seconds since 1970 
timestamp: prepend a timestamp to data 
2.17: Contiki> 

blink & kill

Try "blink 100 &" to start blinking the LED's for 100 times. Notice the '&' at the end of that! You should now see all 3 LED's on Zigduino flash on and off repeatedly.

Then type "kill blink" when you're done admiring your blinking lights.

ping

We can also ping from within the shell!

2.17: Contiki> ping fdfd::3
SEND 13 bytes
ping fdfd::3
Sending Echo Request to fdfd:0000:0000:0000:0000:0000:0000:0003 from fdfd:0000:0000:0000:0000:0000:0000:0001 
Other ICMP6 message received.
Echo reply received.

Sensor Collection

See Sensor Collection.

Remote Actuation

Once we can get data from nodes, now we want to control them, perhaps to put a node on our sprinklers and tell it to go soak the lawn from the comfort of the couch.

Because the shell has been so handy sofar, we'll use it again. This time, the 'sendcmd' command will let us send a particular command to a particular remote node. For this test, put the shell on two nodes.

$ cd tests/shell
$ make upload login AVRDUDE_PORT=/dev/ttyUSB0
$ make upload login AVRDUDE_PORT=/dev/ttyUSB1

This brings up the usual preamble. At the prompt, type "sendcmd fdfd::3 blink 20", and replace fdfd::3 by the IP address of the target node.

You'll see this on the sender:

2.17: Contiki> sendcmd fdfd::3 blink 10
Sending command to  fdfd::3

And this on the receiver, along with the requisite blinking of LED's

UDP Command Server received: 'blink 10' from fdfd::1

Read More

Next: Future. What's coming next.