OBLOQ模塊是DFRobot公司開發的一款基於ESP8266芯片的物聯網通訊模塊。模塊使用串口(TTL UART)和Arduino(或者其餘單片機)通訊,支持MQTT,HTTP等協議,能夠很方便的訪問互聯網,快速搭建物聯網項目。php
技術規格:html
引腳定義:git
引腳編號 | 引腳名 | 做用 |
---|---|---|
1 | TX | 串口發送 |
2 | RX | 串口接收 |
3 | GND | 電源地 |
4 | Vcc | 電源正 |
ESP8266是樂鑫公司開發的一款帶Wi-Fi功能的主控芯片,因此裏面也跑有程序(或者叫固件:Firmware)。可是ESP8266的開發環境還不夠普及,開發難度較大,因此一般會將ESP8266設計成一個單獨的網絡模塊去使用(至關於做爲單片機主控的無線網卡)。市面上比較流行是安信可公司的ESP8266模塊,燒寫了支持AT命令的固件,那麼單片機主控就能夠經過UART發送AT命令來控制和使用ESP8266。OBLOQ模塊默認燒寫了DFRobot公司本身開發的固件,其使用格式化的字符串形式的調用接口,而非AT命令。github
Obloq是一個物聯網模塊,而非主控。因此,Obloq只是充當了Arduino主控(或者其餘單片機主控)的一個「助手」——幫助主控完成網絡通訊。那麼,主控芯片以何種方式傳遞命令給Obloq,以及Obloq有哪些支持的命令呢?服務器
咱們經過下面一個類比來講明:網絡
主人經過說話的方式,發出命令傳達給狗子小黃,小黃聽到命令後就會裏面完成相應的動做。Arduino將命令字符串經過串口發送給Obloq模塊,模塊收到命令後,執行對應的操做。 函數
若是主人對狗子小黃說:「跳舞」,然而主人從沒有給小黃訓練過跳舞,因此小黃不會有所反應,它不懂。若是Arduino經過串口給Obloq發送「I love u」,Obloq模塊也不會作出任何動做,由於Obloq燒寫的固件裏沒有這條指令,它沒法識別。oop
Obloq命令字符串舉例(點擊查看完整的命令表)ui
命令字符串 | 命令做用 |
---|---|
"|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的鏈接 |
因此咱們能夠得出如下結論:
一、調用接口就是ESP8266固件裏面預約義的命令的集合,這些命令由主控經過串口下發,有的命令執行後ESP8266還會回傳執行狀態給主控。固然這裏的解釋只限於本文涉及到的context。
二、Obloq和Arduino(或其餘單片機)主控之間經過串口來做爲命令和響應的傳輸通道。
三、模塊只能識別和執行它的固件中定義的命令,不一樣的固件支持的命令可能不一樣,命令的表現形式也可能不一樣。
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平臺註冊帳號,註冊後登陸,網頁右上角有註冊 /登陸按鈕:
登陸後進入工做間 :
操做步驟:
一、複製【工做間】裏的iot_id和iot_pwd替換下面代碼中的"bbbbbbbbb" 和 "cccccccccc" 。
二、在【工做間】添加一個設備,複製topic替換下面代碼中的"aaaaaaaaa"。
三、將下面代碼中的「myWIFI」和"123456"改成本身使用的WIFI名和WIFI密碼。
四、鏈接好電路後(見下面的接線圖),將代碼下載到Arduino板中。
五、在【工做間】點擊新建設備的【發送消息按鈕】,分別發送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(); //輪詢 }