Arduino UNO+ESP-WROOM-02(ATコマンドモード)でAmbient
Ambientは、簡便なシステム構成で環境データを送信、蓄積、可視化(グラフ化)を可能にするアンビエントデーター株式会社が提供するサービスです。
Ambientへデータ送信するためのハードウェア、ソフトウェアは、Obniz、IchigoJam、ESP-WROOM-02、ESP-WROOM-32などの様々な構成でのサンプルが用意されています。
ここでは、Arduino UNO+ESP-WROOM-02(ATコマンドモード)の(あまり一般的に選択しないであろう)構成での運用を構築します。 このハードウェア構成で運用するのに必要なスケッチを探したところ、1000円あったら電子工作 ThousanDIYの@tomorrow56氏がSpresenseボード向けに開発、販売されているWi-Fi add-on board for SPRESENSEボードがESP-WROOM-02をATコマンドモードで使用してAmbientへのデータ送出するサンプルコードを提供されているのを見つけました。
こちらのサンプルはSpresense+ESP-WROOM-02の構成用ですが、Arduino UNOで多少の修正は必要ながらコンパイルすることができました。
然しながら、Spresenseと比べてRAM容量が圧倒的に少ないために計測データをAmbientサーバーへの送出形式に変換するデータ領域が不足で、コンパイル時に警告が表示され、実際に動作が不安定(正しく動作しない)になります。
@tomorrow56氏のサンプルは、Ambientで提供されているライブラリとの親和性を主眼にSpresense向けに作成されてい(るものと思い)ますので、Arduino UNOのようなボードでの運用は難しそうです。
ということで、サンプルコードの借用は断念して、ESP-8266(ATコマンドモード)用に作られた「HttpClient_ESP8266_ATライブラリ」を使わせていただくことにしました。
qoosky / Arduino_HttpClient_ESP8266_AT
https://github.com/qoosky/Arduino_HttpClient_ESP8266_AT
ソースコード(update:2020/ 2/13 14:50)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
#include <HttpClient_ESP8266_AT.h> #define WSSID "SSID" #define WPASSWORD "PASSWORD" #define AMBIENT_HOST "54.65.206.59" #define AMBIENT_CHANNELID "12345" #define AMBIENT_WRITEKEY "WriteKey" const byte rxPin = 2; // Wire this to Tx Pin of ESP8266 const byte txPin = 4; // Wire this to Rx Pin of ESP8266 HttpClient_ESP8266_AT httpClient(rxPin, txPin); #include <DHT12.h> DHT12 dht12; void setup() { Serial.begin(115200); dht12.begin(); while (true) { if (httpClient.statusAT()) break; Serial.println("AT status NOT OK"); delay(1000); } Serial.println("AT status OK"); while (true) { if (httpClient.connectAP(WSSID, WPASSWORD)) break; Serial.println("Failed to connected to an AP. retrying..."); delay(1000); } Serial.println("Successfully connected to an AP"); while (true) { if (httpClient.statusWiFi()) break; Serial.println("WiFi status NOT OK"); delay(1000); } Serial.println("WiFi status OK"); } void loop() { float t12 = dht12.readTemperature(); float h12 = dht12.readHumidity(); if (isnan(t12) || isnan(h12)) { Serial.println("Failed to read from DHT12 sensor!"); } else { String bodys = "{\"writeKey\":\"" AMBIENT_WRITEKEY "\"," "\"d1\":\"" + String(t12) + "\"," "\"d2\":\"" + String(h12) + "\"}"; Serial.println(bodys); httpClient.post(AMBIENT_HOST, "/api/v2/channels/" AMBIENT_CHANNELID "/data", bodys, "application/json"); if (httpClient.responseStatusCode() >= 0) { Serial.println("SUCCESS"); } else { Serial.println("FAILURE, retrying..."); } } delay(60000); } |
「Ambientの諸元、制限」からの引用
平均すると28.8秒に1回のペースです。
この記事へのトラックバック URL :
Leave a comment