AVR-IoT WA開発ボード(Master)とArduino Nano(Slave)間をI2 Cで通信します。I2 Cアドレスは「0x21」、4バイトをArduino nanoとAVR-IoT WA開発ボードに送信します。
Arduino nanoとAVR-IoT WA開発ボード間の接続
Arduino nanoとAVR-IoT WA開発ボード間の接続ピンを次に示します。
nano(スレーブ) | AVR-IoT WA開発ボード(マスター) |
---|---|
SCL | SCL |
SDA | SDA |
GND | GND |
Arduino nanoとAVR-IoT WA開発ボード間の接続画像を次に示します。
Arduino Nano(Slave)のプログラム作成
Arduino Nano上でスレーブとして動作するプログラムを次に示します。
i2c_nanoslavetopic.ino
/********************************************** Arduino Nano I2C(Slave) **********************************************/ #include <Wire.h> byte b=0; void setup() { Serial.begin(9600); Serial.println("/-----START Arduino Nano-----/"); Serial.println("/----------I2C Slave---------/"); Wire.begin(0x21);// Slave ID #21 Wire.onRequest(requestEvent); } void loop() { } void requestEvent() { Wire.write(b++); Wire.write(b++); Wire.write(b++); Wire.write(b++); }
AVR-IoT WA開発ボード(Master)のプログラム作成
AVR-IoT WA開発ボード上でマスタとして動作するプログラムを次に示します。sendToCloud関数の22行目のi2c_readNBytes関数で、I2 Cアドレスは「0x21」、4バイトを入力します。
static void sendToCloud(void) { static char json[PAYLOAD_SIZE]; static char publishMqttTopic[PUBLISH_TOPIC_SIZE]; ledTickState_t ledState; // int rawTemperature = 0; //char *sensors = NULL; int light = 0; int len = 0; uint8_t sw0 = SW0_GetValue() != 0; // tomosoft uint8_t buf[128]; memset((void*)publishMqttTopic, 0, sizeof(publishMqttTopic)); sprintf(publishMqttTopic, "%s/sensors", cid); // This part runs every CFG_SEND_INTERVAL seconds if (shared_networking_params.haveAPConnection) { // rawTemperature = SENSORS_getTempValue(); light = SENSORS_getLightValue(); //sensors = ExtSensor_get(); i2c_readNBytes(0x21, &buf[0], 4); // len = sprintf(json,"{\"Light\":%d,\"Temp\":%d.%02d}", light,rawTemperature/100,abs(rawTemperature)%100); //len = sprintf(json,"{\"Light\":%d,\"Temp\":%d.%02d,\"Switch 0\":%u}", light,rawTemperature/100,abs(rawTemperature)%100, sw0); len = sprintf(json,"{\"Light\":%d,\"Switch 0\":%u,\"Temp\":%d,\"Hart\":%d,\"Spo2\":%d}", light, sw0,buf[1],buf[2],buf[3]); debug_printInfo("json: %s",json); } if (len >0) {
Arduino nanoとAVR-IoT WA開発ボード通信
作成したプログラムを実行し、コマンド「debug 4」を入力すると、AVR-IoT WA開発ボードのシリアル端末に次の内容が表示され、AVR-IoT WA開発ボードでデータが受信されていることが確認できます。
-------------------------------------------- Unknown command. List of available commands: reset device thing reconnect version cli_version wifi[, ,[authType]] debug -------------------------------------------- OK 012351E4955C0D26FE INFO NORMAL json: {"Light":99,"Switch 0":1,"Temp":93,"Hart":94,"Spo2":95} 012351E4955C0D26FE INFO NORMAL CLOUD: Uptime 23s SocketState (3) MQTT (3) 012351E4955C0D26FE DEBUG NORMAL MQTT: sendresult (107) 012351E4955C0D26FE INFO NORMAL json: {"Light":99,"Switch 0":1,"Temp":97,"Hart":98,"Spo2":99} ... 012351E4955C0D26FE INFO NORMAL CLOUD: Uptime 32s SocketState (3) MQTT (3) 012351E4955C0D26FE DEBUG NORMAL MQTT: sendresult (110) 012351E4955C0D26FE INFO NORMAL json: {"Light":99,"Switch 0":1,"Temp":133,"Hart":134,"Spo2":135} 012351E4955C0D26FE INFO NORMAL CLOUD: Uptime 33s SocketState (3) MQTT (3) 012351E4955C0D26FE DEBUG NORMAL MQTT: sendresult (110) 012351E4955C0D26FE INFO NORMAL json: {"Light":99,"Switch 0":1,"Temp":137,"Hart":138,"Spo2":139}
AWS Cloud sandboxの表示を次に示します。