Microchip AVR-IoT WA開発ボードを入手しました。実行ファイルをMicrochip のサイトからダウンロードしてインストールし、AVR-IoT WA開発ボードに実装されているセンサーのデータがAWSに送られ、AWS Cloud sandboxに表示させます。手順を次に示します。
- AVR-IoT WA開発ボードにマイクロUSBケーブルを接続してパソコンと接続すると、エクスプローラを使用するとパソコンから次のように「CURIOSITY」ドライブが見えます。なお、AVR-IoT WA開発ボードの青のLEDがゆっくり点滅しています。
- 表示されている「CLICK-ME.HTM」ファイルをダブルクリックするとMicrochipのサイトが表示されるので、次の表示の「Get the latest Firmware」ボタンを押して、移動したGitHubからAVR-IoT WA開発ボードの実行ファイル「AVR-IoT-WA-4.1.0.hex」をダウンロードし、「CURIOSITY」ドライブに置きます。
- WiFiと接続を行うために、サイト上に表示されている次の画面からSSIDとパスワードを設定し、「Download Configuration」ボタンを押し「WIFI.CFG」ファイルを作成します。作成した「WIFI.CFG」ファイルを「CURIOSITY」ドライブに置きます。
- サイト上に次のようにAVR-IoT WA開発ボードのセンサーからのデータが表示されます。
- なお、次のように、AVR-IoT WA開発ボードの青と緑のLEDが点灯し、黄色のLEDが点滅します。
- 上記の設定を一度行えば、AVR-IoT WA開発ボードを接続すれば自動的にプログラムが実行され、AWSに接続します。
- プログラムソースコードを「https://github.com/microchip-pic-avr-solutions/avr-iot-aws-sensor-node-studio」から取得し、開発環境Atmel Studio 7.0を使って変更します。
- AVR-IoT WA開発ボードからさらに追加情報を送信して、AWS Cloud sandboxに表示させます。追加する情報は、AVR-IoT WA開発ボード上の「SW0」スイッチのON/OFFデータとします。Atmel Studio 7.0を使って、次のように「application_manager.c」ファイルの「sendToCloud」関数を変更し、作成したHEXファイルを「CURIOSITY」ドライブに置きます。
- 9行目を追加し、18行目を19行目に置き換えます。
- AWS Cloud sandboxに次の表示が追加され、AVR-IoT WA開発ボード上の「SW0」スイッチを押すごとに表示が変化します。
- 、AWS Cloud sandboxに表示されたトグルスイッチをオンオフすることにより、AVR-IoT WA開発ボードの緑のLEDのON/OFFを切り替えます。Atmel Studio 7.0を使って、次のように「application_manager.c」ファイルの「MAIN_dataTask」関数を変更し、、作成したHEXファイルを「CURIOSITY」ドライブに置きます。
- 7行目から16行目のコードを17行目の上に記述します。
- AWS Cloud sandboxに次のように表示されたtoggle「toggle」スイッチを切り替え、「Send to Device」ボタンを押すごとに、AVR-IoT WA開発ボード上の緑のLEDが切り替えに対応して点灯または消灯します。
application_manager.c
static void sendToCloud(void) { static char json[PAYLOAD_SIZE]; static char publishMqttTopic[PUBLISH_TOPIC_SIZE]; ledTickState_t ledState; int rawTemperature = 0; int light = 0; int len = 0; uint8_t sw0 = SW0_GetValue() != 0; 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(); // 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);
application_manager.c
uint32_t MAIN_dataTask(void *payload) { ledTickState_t ledState; ・・・ // This is milliseconds managed by the RTC and the scheduler, this return // makes the timer run another time, returning 0 will make it stop if(!getToggleState()) { ledState.Full2Sec = LED_OFF_STATIC; LED_modeGreen(ledState); } else { ledState.Full2Sec = LED_ON_STATIC; LED_modeGreen(ledState); } return MAIN_DATATASK_INTERVAL;