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