Ce tutoriel a pour objectif de proposer un montage Arduino comportant 2 leds, qui seront visibles sur une plateforme OpenTheBox.
les Pin 13 et 12 sont branchées chacune sur une led.
la totalité du code pour ce tutoriel se trouve ici:
Ici il s'agit de réaliser le comportement que l'on souhaite de notre dispositif électronique en accord avec les actions de la plateforme OpenTheBox.
Quand un message arrive de OpenTheBox, la méthode newMessage est appelée avec le message entrant, c'est ici qu'il faut faire son action (allumé, éteindre...).
/**
* Override Led to process events
*/
class MyLed : public SBLed { // A lots of things is already do by SBLed class : ie message analysis
public:
int pin;
/**
* Contructors
*/
MyLed(const int pin, unsigned long hearbeat_period_ms=500) : SBLed(hearbeat_period_ms) , pin(pin) {
pinMode(pin, OUTPUT);
};
/**
* Init comm and hardware when address is requested
*/
virtual void start(void) {
SBLed::start();
digitalWrite(pin,HIGH);
};
/**
* Init comm and hardware when address is knwown by device
*/
virtual void setAddr(const char * newAddress) {
SBLed::setAddr(newAddress);
digitalWrite(pin,HIGH);
};
/**
* on change from OTB
*/
virtual void newMessage(char *message) {
SBLed::newMessage(message); // Message analysis that set le value member
digitalWrite(pin,value);
};
};
C'est le programme principal, qui consiste essentiellement à configurer l'ensemble: montage et ses branchemements, l'émission, réception et distribution des messages arrivant de OpenTheBox.
/* LED example
*
* Version: 0.1.0
* Created: 2015-02-25 by Franck Roudet
*/
#include <SBMessenger.h>
#include <sbmessage.h>
#include <sbdevice.h>
#include <sbdispatcherdevice.h>
#include "LedPinout.h"
/**
* Dispatcher for incoming Simple Bee message
*/
SBDispatcherDevice disp;
/**
* Simple bee message manager
*/
SBMessenger sbmessenger(Serial,SBEndOfMessage, &disp, SBCheckSum);
/**
* Declare my devices
*/
const char * const ledType="001";
MyLed led1(13); // led1 on pin13 - default heart type
MyLed led2(12, 3000); // led2 on pin12 - 3sec
/**
* List of monitoring devices
*/
SBDevice * stbDeviceList[]={ &led1, &led2, NULL }; // WARNING: must ends with NULL
void setup() {
// Start the serial port
Serial.begin(57600);
// Set list of device for dispatching
disp.setDeviceList(stbDeviceList);
delay(500); // Waiting radio
// Start device if necessary ia ask for address
// start all (WARNING OTB don't do that !!!!!! so set addr
//for (SBDevice **device=stbDeviceList;*device;device++) {
// (*device)->start();
//}
// set addresses
led1.setAddr("0101");
led2.setAddr("0102");
led1.value=1;
led1.batteryLevel=5;
led2.value=2;
led2.batteryLevel=9;
}
void loop() {
// Looks for incoming message
sbmessenger.monitor();
}
Voir le tutoriel sur Open The Box
Vous devez avoir Python 2.X installé, et pip.
Puis installer fysom et pyserial:
pip install fysom
pip install pyserial
Brancher le dongle/montage arduino maître sur le PC.
Utiliser le simulateur python simplebee.py OpenTheBox qui de trouve https://github.com/Orange-OpenSource/SimpleBee4Arduino/tree/master/tools
Avant d'utiliser le simulateur, il faut identifier le port sur lequel est branché le dongle/montage arduino maître (celà dépends de l'OS - COMX ou /dev/ttyACMX).
Lancer le simulateur, par exemple sur linux:
$python simplebee.py --debug --baudrate 57600 --port COM6
2015-03-18 11:11:56,563 - DEBUG simplebee - debug is on
2015-03-18 11:11:56,564 - DEBUG simplebee - Reading on COM6
2015-03-18 11:34:31,740 - ERROR simplebee - ->Unknown device 0102 auto provide
2015-03-18 11:34:31,740 - DEBUG simplebee - Build that A {'typemodule': u'A001', 'addr': '0102', 'ser': Serial<id=0x7fd07322ea50, open=True>(port='/dev/ttyACM0', baudrate=57600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)}
2015-03-18 11:34:31,740 - DEBUG simplebee - PseudoDevice {'typemodule': u'A001', 'addr': '0102', 'ser': Serial<id=0x7fd07322ea50, open=True>(port='/dev/ttyACM0', baudrate=57600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)}
2015-03-18 11:34:31,741 - DEBUG simplebee - Module of type A001 at address 0102 detected
2015-03-18 11:34:31,741 - INFO simplebee - [Identified 0102]
2015-03-18 11:34:31,741 - INFO simplebee - [new value from 0102]
2015-03-18 11:34:31,741 - INFO simplebee - {'batteryLevel': u'9', 'value': u'0'}
2015-03-18 11:34:31,741 - INFO simplebee - -> send actuator ack event r01021
2015-03-18 11:34:31,742 - INFO simplebee - [Identified 0102]
2015-03-18 11:34:31,742 - DEBUG simplebee - Mesg type='R' len=14 'R01011B5A0018>'
2015-03-18 11:34:31,742 - ERROR simplebee - ->Unknown device 0101 auto provide
2015-03-18 11:34:31,742 - DEBUG simplebee - Build that A {'typemodule': u'A001', 'addr': '0101', 'ser': Serial<id=0x7fd07322ea50, open=True>(port='/dev/ttyACM0', baudrate=57600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)}
2015-03-18 11:34:31,742 - DEBUG simplebee - PseudoDevice {'typemodule': u'A001', 'addr': '0101', 'ser': Serial<id=0x7fd07322ea50, open=True>(port='/dev/ttyACM0', baudrate=57600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)}
2015-03-18 11:34:31,743 - DEBUG simplebee - Module of type A001 at address 0101 detected
2015-03-18 11:34:31,743 - INFO simplebee - [Identified 0101]
2015-03-18 11:34:31,743 - INFO simplebee - [new value from 0101]
2015-03-18 11:34:31,743 - INFO simplebee - {'batteryLevel': u'5', 'value': u'1'}
2015-03-18 11:34:31,743 - INFO simplebee - -> send actuator ack event r01012