微控制器MQTT實現推送簡單使用

2021-07-11 07:03:06 字數 2044 閱讀 2708

c)mqtt基礎知識

2、移植mqttpacket到專案裡:

複製資料夾mqttpacket到工程,複製mqttpacket\samples裡面的transport.c、transport.h到工程

3、修改已經transport.c裡面的四個介面:

int transport_sendpacketbuffer(int sock, unsigned

char* buf, int buflen);

int transport_getdata(unsigned

char* buf, int count);

int transport_open(char* host, int port);

int transport_close(int sock);

看介面名稱就知道,該四個介面實現的是tcp資料的收發,具體修改需要根據已經實現的tcp介面來定。(微控制器上常用的tcp/ip協議棧主要有uip、lwip)

注意:mqtt是tcp/ip的應用層,傳輸層需要自己實現,這四個介面分別對應tcp的連線、收、發和關閉。

4、實現訂閱/發布,檢視mqttpacket\samples下的pub0sub1.c。

下面為引數的意義:

mqttpacket_connectdata data = mqttpacket_connectdata_initializer; //連線引數

data.clientid.cstring = 「me2」; //客戶id,唯一

data.keepaliveinterval = 200; //儲存存活時間200s

data.cleansession = 1;//重新連線後是否清除以前的資訊 0表示不清除,1表示重連清除

data.username.cstring = 「admin」;//如果伺服器需要使用者名稱密碼,這裡設定

data.password.cstring = 「admin」;

qos :

0 表示最多一次

1 表示至少一次

2 表示只有一次

mqttdeserialize_publish(&dup,&qos,&retained,&msgid,&receivedtopic,&payload_in, &payloadlen_in, buf,buflen);
msgid:該包的id,paketid,如果需要增加反饋(qos為1和2需要反饋),需要獲取該id

傳送反饋:

mqttdeserialize_publish(&dup, &qos, &retained, &msgid,&receivedtopic,&payload_in, &payloadlen_in, buf, buflen);

intlen = mqttserialize_puback(buf,buflen,msgid);

transport_sendpacketbuffer(ack_buf,len);

接收伺服器的反饋:

if(puback == mqttpacket_read(buf,buflen,transport_getdata))

比較傳送的msgid和反饋獲取的packetid,如果一致表示該包傳送成功。

等等,具體看文件

5、伺服器實現 mosquitto

請參考:

指令舉例:

訂閱 mosquitto_sub -h ***.***.***.*** -u admin -p admin -t substopic

-h 伺服器網域名稱

-u 使用者名稱(沒有可以省略)

-p密碼(沒有可以省略)

-t topic名稱

發布:mosquitto_pub -h ***.***.***.*** -u admin -p admin -t substopic -m hello

-m 發布的內容

微控制器流星燈 51微控制器拖尾燈實現

這個拖尾燈,或者掃瞄燈,或者流星燈,不管怎麼叫,原理上估計都是一樣的。這玩意困擾了我好長的時間。我知道用pwm可以做出明暗效果。但是無法做到實現多路控制。在網上有種叫 霹靂遊俠掃瞄燈 的東西。好像是用專用的ic做的。找不到相關的原始碼。自己想啊想。一直想了乙個月。直到昨天,上課的時候靈光一閃,突然想...

微控制器藍芽燒錄 用微控制器實現藍芽功能

下面的文字只是關於藍芽技術的調製演算法方面,我認為只需要將藍芽模組加 在微控制器上就可以了,而不必通過微控制器程式設計來實現具體的演算法,只需要編 寫使兩個模組的介面就可以,也就是微控制器傳送訊號時的激勵程式,接受外 來訊號後的處理程式。置於其餘就由作為硬體裝置的藍芽來自行處理。不過 我並不確定,我...

微控制器實現軟體濾波

1 限幅濾波法 又稱程式判斷濾波法 a 方法 根據經驗判斷,確定兩次取樣允許的最大偏差值 設為a 每次檢測到新值時判斷 如果本次值與上次值之差 a,則本次值有效 如果本次值與上次值之差 a,則本次值無效,放棄本次值,用上次值代替本次值 b 優點 能有效克服因偶然因素引起的脈衝干擾 c 缺點 無法抑制...