Suite a mon article sur le décodeur EnOcean j’ai décidé de créer une libraire pour Arduino pour le TCM310.
Le code est extrêmement simple avec une classe “EnOcean” reprenant les éléments de la trame envoyé par le TCM310.
EnOceanMsg::EnOceanMsg() { _dataLength1 = 0; _dataLength2 = 0; _optLength = 0; _packetType = 0; _headerCrc8 = 0; _org = 0; _payload = 0; _senderId1 = 0; _senderId2 = 0; _senderId3 = 0; _senderId4 = 0; }
Cette classe possède une méthode “decode” qui utilise la lib software de l’arduino pour décoder ce qui arrive sur l USART :
void EnOceanMsg::decode() { while(Serial1.available() > 0) { //Serial.println("Decoding"); uint8_t aChar = Serial1.read(); switch(_pos) { case 0: if (aChar == START_BYTE) { _pos++; //Serial.println("START"); } break; case 1: // length msb _dataLength1=aChar; _pos++; //Serial.print("length msb:"); //Serial.println(_dataLength1, HEX); break; ...
La classe offre également une méthode “pretty print” pour afficher ses éléments (et donc les informations reçu du TCM 310) :
void EnOceanMsg::prettyPrint() { Serial.println("Pretty print start"); Serial.print("length:"); char buf1[9]; sprintf(buf1, "%04x", getPacketLength()); Serial.println(buf1); //Serial.println(getPacketLength()); Serial.print("Optional length:"); Serial.println(_optLength); Serial.print("Packet type:0x"); Serial.println(_packetType, HEX);
La dernière version du code de la librairie est disponible sur BitBucket :
https://bitbucket.org/charly37/arduino_enocean_lib
Voila un exemple d’utilisation de la lib avec mon interrupteur EnOcean :
#include EnOceanMsg aMsg; void setup() { //USB Serial.begin(9600); //Pin 0/1 Serial1.begin(57600); } void loop() { delay(500); aMsg.decode(); Serial.println("Working"); if (aMsg.getPayload() == 0x50) { Serial.println("OKOK"); } }
Ce qui produira le résultat suivant sur le moniteur série :
Working Working Pretty print start length:0007 Optional length:7 Packet type:0x1 ORG:0xF6 Payload:0x70 Sender Id:8ba977 Pretty print end Working Pretty print start length:0007 Optional length:7 Packet type:0x1 ORG:0xF6 Payload:0x0 Sender Id:8ba977 Pretty print end Working Working