? ? ? 現(xiàn)在有很多Iot服務(wù)平臺(tái),但大多是云平臺(tái),今天就介紹一個(gè)基于SMQ本地服務(wù)的ESP8266模塊應(yīng)用示例。
一、環(huán)境介紹
ESP8266Wifi模塊(我用的是安信可的ESP-01s,也就是社區(qū)活動(dòng)的哪款,相關(guān)資料見 http://wiki.ai-thinker.com/esp8266 )
一塊面包板(因?yàn)殡娐凡粡?fù)雜,其實(shí)隨便一塊就好)
一塊USB-TTL模塊(我用的也是社區(qū)活動(dòng)的,用的是2101芯片,提供了5V->3.3V)
2個(gè)LED(1個(gè)藍(lán)色,1個(gè)黃色)
無(wú)線路由器(提供聯(lián)網(wǎng)支持,等下所有設(shè)備都需要連接上去,在一個(gè)局域網(wǎng)段內(nèi))
1個(gè)連上局域網(wǎng)(互聯(lián)網(wǎng))的Linux主機(jī)(也可以是windows),用來(lái)部署SMQ server,服務(wù)器IP 192.168.10.111。
一些杜邦線,用于連接ESP-01s與USB-TTL模塊,以及LED等。
Arduino編程環(huán)境(windows、linux、macos都可以,我采用的是1.8.4版本),已經(jīng)部署好ESP8266編程支持(可參考 http://www.ickey.cc/community/thread-101186-1-1.html)。
二、MSQ Server的搭建(包含LED應(yīng)用支持)
本次的MSQ Server是采用的mako server(https://makoserver.net/),在?https://makoserver.net/download/overview/ 介紹中提到了很多個(gè)系統(tǒng)版本服務(wù)下載安裝,我實(shí)際用的是Linux(Debian 9 ,64bit,X86_64),安裝比較簡(jiǎn)單,就是用root權(quán)限執(zhí)行
bash -c "$(wget -q -O- makoserver.net/download/InstallMakoX86.sh)"即可,因?yàn)槲业南到y(tǒng)中已經(jīng)安裝有其它http服務(wù),所以會(huì)分配一個(gè)其它的端口解決端口沖突問(wèn)題,這里假定端口是9357,這個(gè)端口需要記住,以保障后面聯(lián)網(wǎng)使用正確,也可以直接下載windows版本的服務(wù)器,在windows下打開即可。至此,服務(wù)已經(jīng)部署,用瀏覽器打開可以顯示出一個(gè)頁(yè)面,類似下圖(1個(gè)404頁(yè)面,只是表明服務(wù)已經(jīng)部署,但沒(méi)有具體應(yīng)用支持)
但這還不能提供任何具體的服務(wù),還需要部署應(yīng)用支持。這里下載 http://makoserver.net/download/IoT-LED-Broker.tar.gz , 把所有文件解壓到/home/mako/www下(linux平臺(tái))
支持搭建好了LED的IoT應(yīng)用服務(wù)環(huán)境。這時(shí)再用瀏覽器訪問(wèn)http://192.168.10.111:9357/ 會(huì)出現(xiàn)如下的頁(yè)面
這表明應(yīng)用支持已經(jīng)部署好,這個(gè)頁(yè)面長(zhǎng)時(shí)間也可能轉(zhuǎn)換成
三、模擬LED-IoT測(cè)試服務(wù)支持是否可用
在linux下下載 realtimelogic.com/downloads/SMQ/SimpleMQ.zip ,這是一個(gè)linux下的LED-IoT模擬客戶端程序,解壓到SimpleMQ目錄,修改其中
examples/m2m-led.c 文件中?
#define SIMPLEMQ_DOMAIN "http://simplemq.com"
根據(jù)你實(shí)際的IP地址和端口修改,比如我就修改為:
#define SIMPLEMQ_DOMAIN "http://192.168.10.111:9357"
然后執(zhí)行make 編譯(編譯環(huán)境請(qǐng)參考其他文章),則目錄下產(chǎn)生一個(gè)led-msq 的可執(zhí)行文件,執(zhí)行它,正常則窗口如下
這時(shí)瀏覽器窗口如下
這表明SMQ服務(wù)支持已經(jīng)完全可用了(瀏覽器窗口進(jìn)行操作,則命令行窗口有反映,命令行窗口操作也會(huì)反映到瀏覽器窗口,可自行實(shí)驗(yàn)),下面是時(shí)候?qū)崿F(xiàn)ESP8266應(yīng)用了。
四、ESP8266 wifi模塊的應(yīng)用系統(tǒng)搭建
下載https://realtimelogic.com/downloads/SMQ/SimpleMQ.zip 文件,這個(gè)就是ESP8266 簡(jiǎn)單應(yīng)用SMQ的Arduino工程例子。解壓它到一個(gè)目錄下,用Arduino打開其中的SMQ.ino文件,即可編輯。
這里先插幾句,因?yàn)樵脊こ淌轻槍?duì)完整的ESP8266模塊(引出了更多的IO接口環(huán)境)編寫,而我的ESP8266 模塊(安信可 ESP-01s)只引出了IO0和IO2,所以需要進(jìn)行修改。
主要做如下修改,對(duì)SMQ.ino文件
#error remove this line and set credentials belowstatic const char* ssid = "";static const char* password = "";所有的ESP8266模塊都需要根據(jù)路由器情況修改以保障聯(lián)網(wǎng),比如我修改為
//#error remove this line and set credentials belowstatic const char* ssid = "myrouter";//自己路由器的ap ssidstatic const char* password = "router123456";// 自己路由器密碼
此外根據(jù)我的模塊個(gè)別的修改,把
#define D0 16 // Bultin LED on Geekcreit ESP8266#define D7 13 // Wire LED between D7 and ground#define D8 15 // Wire LED between D8 and ground
修改為
#define D0 0 // Bultin LED on Geekcreit ESP8266#define D7 2 // Wire LED between D7 and ground//#define D8 15 // Wire LED between D8 and ground
把
static const LedInfo ledInfo[] = { { "Bultin LED", LedColor_blue, 1 }, { "LED D7", LedColor_red, 2 }, { "LED D8", LedColor_red, 3 }};修改為:
static const LedInfo ledInfo[] = { { "Blue LED(IO0-Low-On)", LedColor_blue, 1 }, { "Yellow LED(IO2-High-On)", LedColor_yellow, 2 }};把
void setup(){ Serial.begin(115200); delay(10); pinMode(D0, OUTPUT); digitalWrite(D0, HIGH); pinMode(D7, OUTPUT); digitalWrite(D7, LOW); pinMode(D8, OUTPUT); digitalWrite(D8, LOW); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected");}修改為:
void setup(){ Serial.begin(115200); delay(10); pinMode(D0, OUTPUT); digitalWrite(D0, HIGH); pinMode(D7, OUTPUT); digitalWrite(D7, LOW); //pinMode(D8, OUTPUT); //digitalWrite(D8, LOW); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected");}把
extern "C" int setLed(int ledId, int on){ Serial.printf("Set led %d %s\n", ledId, on ? "on" : "off"); if(ledId >= 1 && ledId <= LEDSLEN) { leds[ledId-1] = on; switch(ledId) { case 1: digitalWrite(D0, on ? LOW : HIGH); break; case 2: digitalWrite(D7, on ? HIGH : LOW); break; case 3: digitalWrite(D8, on ? HIGH : LOW); break; } return 0; } return -1;}修改為:
extern "C" int setLed(int ledId, int on){ Serial.printf("Set led %d %s\n", ledId, on ? "on" : "off"); if(ledId >= 1 && ledId <= LEDSLEN) { leds[ledId-1] = on; switch(ledId) { case 1: digitalWrite(D0, on ? LOW : HIGH); break; case 2: digitalWrite(D7, on ? HIGH : LOW); break; //case 3: digitalWrite(D8, on ? HIGH : LOW); break; } return 0; } return -1;}
對(duì)led-example.cpp文件
#define SIMPLEMQ_DOMAIN "http://simplemq.com"
修改為
// 填入實(shí)際SMQ服務(wù)地址和端口信息#define SIMPLEMQ_DOMAIN "http://192.168.10.111:9357"
至此,代碼適配修改已經(jīng)完成,利用Arduino編譯并寫入到模塊(寫入方法參考相關(guān)文檔)。
五、連接好模塊和LED實(shí)現(xiàn)完整電路,電路圖如下:
實(shí)際連接情況如下圖
實(shí)現(xiàn)后可以進(jìn)行測(cè)試了,模塊通電,打開瀏覽器:如下,已經(jīng)有新的設(shè)備連接上SMQ服務(wù)(這里是192.168.10.116)
現(xiàn)在可以通過(guò)瀏覽器來(lái)控制燈的開關(guān)啦,演示視頻地址:https://v.youku.com/v_show/id_XMzcxMTIyNzI2NA==.html
評(píng)論