電控汽車診斷檢修技巧
本文基于ESP8266_NONOS_SDK_V2.0.0_16_08_10中示例項(xiàng)目的esp_mqtt_proj,從這個(gè)示例起我們就脫離的AT指令模塊,開始真正自己實(shí)現(xiàn)功能。
此示例項(xiàng)目用到了一個(gè)協(xié)議:MQTT,剛開始都不知道這是一個(gè)通訊協(xié)議,查閱了一下資料發(fā)現(xiàn)這個(gè)協(xié)議是一個(gè)適合物聯(lián)網(wǎng)方面的協(xié)議,而且在Android推送上使用廣泛。它不同于HTTP的請(qǐng)求應(yīng)答模式,而是采用了訂閱者和發(fā)布者的模式。
本人現(xiàn)在也只是剛剛了解此協(xié)議,本貼的目標(biāo)時(shí)可以成功使用示例中的項(xiàng)目,感興趣的同學(xué)可以看一看聶永的博客:MQTT
此項(xiàng)目用到了一個(gè)esp8266的MQTT類庫(kù)(MQTT client library for ESP8266)
測(cè)試采用了一個(gè)開源的MQTT實(shí)現(xiàn)mosquitto,可以直接在Ubuntu上使用apt-get命令安裝,如下:
sudo apt-get install mosquitto
然后在mqtt_config.h中更改一些配置
//服務(wù)器IP
#define MQTT_HOST “192.168.1.103”
//服務(wù)器端口,默認(rèn)1883
#define MQTT_PORT 1883
//需要連接的無(wú)線網(wǎng)SSID
#define STA_SSID “TP-LINK_801A”
//無(wú)線網(wǎng)密碼
#define STA_PASS “123456789”
配置完以后就可以燒錄進(jìn)模塊了。
不過(guò)注意,此項(xiàng)目中使用
#define INFO( format, 。。. ) os_printf( format, ## __VA_ARGS__ )
這個(gè)宏來(lái)輸出調(diào)試信息,os_printf函數(shù)默認(rèn)輸出使用UART0,在AT模塊中進(jìn)行了額外的配置,使log在UART1輸出。
void mqttConnectedCb(uint32_t *args)
{
MQTT_Client* client = (MQTT_Client*)args;
INFO(“MQTT: Connected ”);
MQTT_Subscribe(client, “/mqtt/topic/0”, 0);
MQTT_Subscribe(client, “/mqtt/topic/1”, 1);
MQTT_Subscribe(client, “/mqtt/topic/2”, 2);
MQTT_Publish(client, “/mqtt/topic/0”, “hello0”, 6, 0, 0);
MQTT_Publish(client, “/mqtt/topic/1”, “hello1”, 6, 1, 0);
MQTT_Publish(client, “/mqtt/topic/2”, “hello2”, 6, 2, 0);
}
在此函數(shù)中訂閱了三個(gè)主題,分別是“/mqtt/topic/0” “/mqtt/topic/1” “/mqtt/topic/2” ,然后自己發(fā)送消息。
我們也可以在mosquitto的客戶端工具,對(duì)這三個(gè)主題進(jìn)行訂閱。
接下來(lái)我們進(jìn)行演示
首先啟動(dòng)mosquitto服務(wù)器
mosquitto -v#輸出1486897303: mosquitto version 1.4.10 (build date Thu, 25 Aug 2016 15:32:03 +0100) starTIng1486897303: Using default config.1486897303: Opening ipv4 listen socket on port 1883.1486897303: Opening ipv6 listen socket on port 1883.
如果提示端口被占用,需要?dú)⒌粽加迷摱丝诘倪M(jìn)程。
啟動(dòng)一個(gè)mosquitto客戶端訂閱主題
mosquitto_sub -t /mqtt/topic/0
啟動(dòng)ESP8266,UART0輸出調(diào)試信息:
load 。。.
MQTT_InitConnecTIon
MQTT_InitClient
WIFI_INIT
connected with TP-LINK_801A, channel 1
dhcp client start.。。
ip:192.168.1.104,mask:255.255.255.0,gw:192.168.1.1
TCP: Connect to ip 192.168.1.103:1883
MQTT: Connected to broker 192.168.1.103:1883
。。.。。.。。.。。.。。.。。.。。.。
這時(shí)我們可以看到剛才訂閱主題的窗口輸出:
mosquitto_sub -t /mqtt/topic/0