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の表示を次に示します。

