前提
早前,發佈了關於 IoT 應用的文章。而近日,香港有一間公司發佈了關於 IoT 的 mBlock 擴展,分別是在 IFTTT 和 ThingSpeak 上使用。下載方法
- 開啟 mBlock
- 按上方的擴充 (Extensions) > 擴展管理員 (Manage Extensions)
- 搜尋 "IoT_ThingSpeak" 或 "IoT_IFTTT",然後下載
程式編寫
我參考了他們的 Arduino 原始碼,相對我之前編寫的較為簡單,而且不需要外加 ESP8266 的檔案。我為方便自己的應用,修改了發送資料的部份。程式主要分成了三個部份:設置Wi-Fi模組收腳位
首先,還是需要一些基本的設定,當然也包括WIFI模組的接腳位設定:#include <Arduino.h>
#include <MeOrion.h>
#include <Wire.h>
#include <SoftwareSerial.h>
SoftwareSerial wifiSerial(A3, A2); /* 腳位選擇請參考上一篇文章 */
char cmd[256]; /* 用於發送資料 */
連接WIFI路由器
然後連接自家的Wi-Fi路由器,將程式中的 _SSID_ 及 _PWD_ 換成你的 Wi-Fi SSID 和密碼。
void setup() {
wifiSerial.begin(9600);
wifiSerial.println(F("AT+CWMODE=1"));
delay(1000);
wifiSerial.println("AT+CWJAP=\""+(String)"_SSID_"+"\"+\""+(String)"_PWD_"+"\"");
delay(10000);
}
發送資料
最後是發送資料,做法就是 HTTP Request 方法中的 GET 一樣
void loop() {
/* 準備上傳資料的指令 */
/* 按自己需求提交資料到網頁 */
/* %s:字串 %d:數字 */
/* 最後必須用\r\n作結尾 */
sprintf(cmd, "GET /test.php?name1=%s&name2=%d\r\n", "value1", value2);
/* 連接自己網址的TCP(更改_IP_Address_) */
wifiSerial.println(F("AT+CIPSTART=\"TCP\",\"_IP_Address_",80"));
delay(5000);
/* 發送資料 */
int len = strlen(cmd) + 2;
wifiSerial.println("AT+CIPSEND="+(String)len);
delay(3000);
wifiSerial.println(cmd);
delay(5000);
wifiSerial.println(F("AT+CIPCLOSE"));
}
總結
這樣就可以做到自己定義的 IoT 程式,不一定要將數據上傳到 IFTTT 或是 ThingSpeak。而其中有些程式用到了 F() 這個功能(不是打多了一個F字),而它是 Arduino 的一個功能,用於將字串存儲在暫存記憶體內,而非 RAM 內,可以減少大量 RAM 的使用量。
沒有留言:
張貼留言