OBLOQ 物聯網模塊
OBLOQ模塊是DFRobot公司開發的一款基於ESP8266芯片的物聯網通信模塊。模塊使用串口(TTL UART)和Arduino(或者其他單片機)通信,支持MQTT,HTTP等協議,可以很方便的訪問互聯網,快速搭建物聯網項目。
技術規格:
- 供電電壓:3.3~5.0V
- 工作電流:<240mA
- 接口類型:Gravity UART 4PIN
- 接口速率:9600
- 無線模式:IEEE802.11b/g/n
- 加密類型:WPA WPA2/WPA2–PSK
- 無線頻率:2.4GHz(不要連接5G Wi-Fi)
- 產品尺寸:35mm * 32mm / 1.38inch * 1.26inch
- 內置協議:TCP/IP 協議棧
引腳定義:
引腳編號 | 引腳名 | 作用 |
---|---|---|
1 | TX | 串口發送 |
2 | RX | 串口接收 |
3 | GND | 電源地 |
4 | Vcc | 電源正 |
ESP8266是樂鑫公司開發的一款帶Wi-Fi功能的主控芯片,所以里面也跑有程序(或者叫固件:Firmware)。但是ESP8266的開發環境還不夠普及,開發難度較大,所以通常會將ESP8266設計成一個單獨的網絡模塊去使用(相當於作為單片機主控的無線網卡)。市面上比較流行是安信可公司的ESP8266模塊,燒寫了支持AT命令的固件,那么單片機主控就可以通過UART發送AT命令來控制和使用ESP8266。OBLOQ模塊默認燒寫了DFRobot公司自己開發的固件,其使用格式化的字符串形式的調用接口,而非AT命令。
Obloq模塊如何與Arduino配合使用?
Obloq是一個物聯網模塊,而非主控。所以,Obloq只是充當了Arduino主控(或者其他單片機主控)的一個“助手”——幫助主控完成網絡通信。那么,主控芯片以何種方式傳遞命令給Obloq,以及Obloq有哪些支持的命令呢?
我們通過下面一個類比來說明:
主人通過說話的方式,發出命令傳達給狗子小黃,小黃聽到命令后就會里面完成相應的動作。Arduino將命令字符串通過串口發送給Obloq模塊,模塊收到命令后,執行對應的操作。
如果主人對狗子小黃說:“跳舞”,然而主人從沒有給小黃訓練過跳舞,所以小黃不會有所反應,它不懂。如果Arduino通過串口給Obloq發送“I love u”,Obloq模塊也不會做出任何動作,因為Obloq燒寫的固件里沒有這條指令,它無法識別。
Obloq命令字符串舉例(點擊查看完整的命令表)
命令字符串 | 命令作用 |
---|---|
"|2|1|wifi_ssid,wifi_pwd|\r" | 連接一個指定的WIFI,例如: "|2|1|myWIFI,123456|\r" 將命令Obloq模塊連接名稱為myWIFI,密碼為123456的WIFI |
"|2|2|\r" | 命令Obloq模塊斷開當前連接的WIFI |
"|4|1|1|host|port|iotid|iotpwd|\r" | 連接到一個MQTT Broker。 host是服務器的主機名或者IP地址; port是MQTT Broker的端口; iotid是建立MQTT連接使用的用戶名; iotpwd是建立MQTT連接使用的密碼; |
為了形成對比,再來看一下安信可ESP8266官方使用的AT命令
AT命令 | 命令作用 |
---|---|
"AT+CWJAP=<wifi_ssid>,<wifi_pwd>\r\n" | 連接一個指定的WIFI,例如: "AT+CWJAP=\"myWIFI\",\"123456\"\r\n" 將命令ESP8266模塊連接名稱為myWIFI,密碼為123456的WIFI。 注意雙引號里面嵌套的雙引號要用轉意字符。 |
"AT+CWQAP\r\n" | 斷開與當前WIFI的連接 |
所以我們可以得出以下結論:
1、調用接口就是ESP8266固件里面預定義的命令的集合,這些命令由主控通過串口下發,有的命令執行后ESP8266還會回傳執行狀態給主控。當然這里的解釋只限於本文涉及到的context。
2、Obloq和Arduino(或其他單片機)主控之間通過串口來作為命令和響應的傳輸通道。
3、模塊只能識別和執行它的固件中定義的命令,不同的固件支持的命令可能不同,命令的表現形式也可能不同。
實驗
Ardunio或兼容Arduino的開發板都有一顆板載的LED,通常是用pin13驅動的,Arduino核心庫中的LED_BUILTIN宏定義了驅動板載LED的引腳,隔離和平台差異。本實驗將通過MQTT協議來遠程點亮和熄滅板載LED。
通過串口發送命令給Obloq來命令其工作依然是很繁瑣的,慶幸的是DFRobot開發出了一個封裝了串口命令的C++庫:Obloq庫。使得我們不用關心底層的串口命令,更加的方便快速的使用OBLOQ模塊。
我們可以在DFRobot的官方Github頁面下載Obloq模塊的Arduino驅動庫。只需要下載其中的Qbloq.cpp和Qbloq.h文件即可,如下圖所示:
接下來安裝Obloq驅動庫到Arduino開發環境。步驟:在Ardiono安裝目錄下的【libraries】目錄下新建一個文件夾【DFRobot_Obloq】(名稱任意),然后將下載的Qbloq.cpp和Qbloq.h文件放進去即可。如下圖:
接下來我們要去DFRobot的Easy IOT平台注冊賬號,注冊后登錄,網頁右上角有注冊 /登錄按鈕:
登錄后進入工作間 :
操作步驟:
1、復制【工作間】里的iot_id和iot_pwd替換下面代碼中的"bbbbbbbbb" 和 "cccccccccc" 。
2、在【工作間】添加一個設備,復制topic替換下面代碼中的"aaaaaaaaa"。
3、將下面代碼中的“myWIFI”和"123456"改為自己使用的WIFI名和WIFI密碼。
4、連接好電路后(見下面的接線圖),將代碼下載到Arduino板中。
5、在【工作間】點擊新建設備的【發送消息按鈕】,分別發送on 和 off,觀察Arduino開發板上的LED的狀態。
實驗接線圖:
實驗代碼:
#include <stdint.h> #include <Obloq.h> #include <SoftwareSerial.h> const String topic1 = "aaaaaaaaa"; //訂閱的主題,需要在【工作間】里添加一個設備后得到 const String iotId = "bbbbbbbbb"; //MQTT服務器的用戶名,在【工作間】里的iot_id可以查看 const String iotPwd = "cccccccccc"; //MQTT服務器的密碼,在【工作間】里的iot_pwd可以查看 const String wifiSSID = "myWIFI"; //obloq模塊連接的WIFI名,改成你用的WIFI名,最好不要有中文 const String wifiPwd = "123456"; //obloq模塊連接的WIFI密碼,改成你用的WIFI密碼 SoftwareSerial obloqModuleSerial(10,11); // 創建一個軟串口,用於和obloq模塊進行通信:10是其RX(接Obloq的TX) , 11是其TX(接Obloq的RX) Obloq olq(&obloqModuleSerial,wifiSSID,wifiPwd,iotId,iotPwd); //創建一個Obloq對象。 //已監聽設備的消息回調函數,可以在這個函數里面對接收的消息做判斷和相應處理,需要用setMsgHandle()來設置這個回調函數 void msgHandle(const String& topic,const String& message) { if(topic==topic1) { if(message == "off") //如果收到了關於topic1主題的"off"消息,則熄滅板載LED { digitalWrite(LED_BUILTIN,LOW); } else if(message == "on") //如果收到了關於topic1主題的"on"消息,則點亮板載LED { digitalWrite(LED_BUILTIN,HIGH); } } } void setup(void) { obloqModuleSerial.begin(9600); //obloq模塊的串口通信波特率是9600,所以要把軟串口的波特率也設置為9600 olq.setMsgHandle(msgHandle);//注冊消息回掉函數 olq.subscribe(topic1); //訂閱主題 pinMode(LED_BUILTIN,OUTPUT); //配置pin 13 ,即驅動板載LED的引腳為輸出模式 } void loop(void) { olq.update(); //輪詢 }
本文參考