1. 程式人生 > >微控制器MQTT實現推送簡單使用

微控制器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);
int
len = MQTTSerialize_puback(buf,buflen,msgid); transport_sendPacketBuffer(ack_buf,len);

接收伺服器的反饋:

if(PUBACK == MQTTPacket_read(buf,buflen,transport_getdata))
{
    unsigned char packettype = 0;
    unsigned char dup_ack = 0;
    unsigned short packetid = 0;

    MQTTDeserialize_ack(&packettype,&dup_ack,&packetid,buf,buflen);
}

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

5、伺服器實現 mosquitto
請參考:http://blog.csdn.net/xukai871105/article/details/39252653
指令舉例:
訂閱 mosquitto_sub -h xxx.xxx.xxx.xxx -u admin -P admin -t substopic
-h 伺服器域名
-u 使用者名稱(沒有可以省略)
-P密碼(沒有可以省略)
-t topic名稱

釋出:mosquitto_pub -h xxx.xxx.xxx.xxx -u admin -P admin -t substopic -m hello
-m 釋出的內容

以上基本實現微控制器與伺服器的聯調。如果需要手機控制微控制器,可下載手機相關的MQTT包進行通訊。

=====更新(2018-03-09)======
很高興這篇筆記能給有些人帶來幫助,我把使用例項上傳到 GitHub,其中有些對 MQTT 的改動,供大家參考。

相關推薦

微控制器MQTT實現簡單使用

2、移植MQTTPacket到專案裡: 複製資料夾MQTTPacket到工程,複製MQTTPacket\samples裡面的transport.c、transport.h到工程 3、修改已經transport.c裡面的四個介面: int tra

C#簡單的JPush(極光) API實現功能(來自mojocube的博客)

size 返回 log c# api live str -s 周期 APP推送功能大家應該都了解了,目前主要的有百度、極光等幾家公司提供推送服務,下面說一下極光推送API的簡單實現推送通知功能。 註冊完極光的賬號後,就可以創建應用,建好後會得到AppKey和Master

android 實現mqtt訊息,以及不停斷線重連的問題解決

前段時間專案用到mqtt的訊息推送,整理一下程式碼,程式碼的原型是網上找的,具體哪個地址已經忘記了。 程式碼的實現是新建了一個MyMqttService,全部功能都在裡面實現,包括連伺服器,斷線重連,訂閱訊息,處理訊息,釋出訊息等基本操作。 首先新增依賴: dependencies { &

Android實現方式解決方案

都是 device andro broker dev 常見 剛才 設置 互聯網  本文介紹在Android中實現推送方式的基礎知識及相關解決方案。推送功能在手機開發中應用的場景是越來起來了,不說別的,就我們手機上的新聞客戶端就時不j時的推送過來新的消息,很方便的閱讀最新的新

在Android應用程序中實現通知

xamarin android 幾乎每一個應用程序的一個重要特性是支持推送通知的能力。使用推送通知,您可以更新用戶,而不需要應用程序在任何時候運行或輪詢服務器, 避免潛在的電池電量不足。 隨著火力點雲信息的介紹(FCM),谷歌使得在Android應用程序中實現推送通知變

極光簡單配置

平臺 ring else shc 代碼 手機號 jpush class func 0、首先去極光申請app應用,免費的! 1、composer引入極光sdk。PS:盡量使用composer,不然可能會有各種坑爹的不能自動加載問題等... 2、引入模塊類 3、直接擼代碼 p

JPush實現

根據官方API首先匯入libs,再匯入res下的drawable、layout、values 要用libs中的檔案的話需要向build.gradle中複製下面的話: android { ...... sourceSets { m

webApp如何實現功能

webApp如何實現推送功能     webApp如何實現推送功能。 實現思路: 1.通過個推推送實現,註冊個推賬號 2.配置推送功能模組 3.js實現推送   實現程式碼: 1、Hbuilder配置程式碼檢視配置 "plu

Android MQTT 訊息demo

··· 不會轉換gif格式,截圖給你們看看吧,如果有好的免費的轉換工具可以留言推薦給我,在此衷心感謝 裡邊寫了好多註釋,應該都能看懂,這個在ssm專案中也可以使用但需要定製,去除android化的東西 ··· 1.介面 2.連線Mqtt 3.傳送和接收訊息(上邊

android進階4step3:Android常用框架——友盟簡單使用(官翻)

友盟官方:快速整合文件 還有之前寫的極光推送的簡單使用:Android常用框架——極光推送的簡單使用 使用步驟: 第一步:.登入註冊友盟的賬號,並繫結郵箱   官網 第二步:以下拷貝自友盟官方文件 前言 【友盟+】訊息推送SDK 5.0.2 整合文件。

WebSocket :用WebSocket實現你必須考慮的幾個問題

目錄: 1.WebSocket簡介 2.專案背景、硬體環境及客戶端支援 本專案通過WebSocket實現同時線上使用者量幾千的推送伺服器(可內網執行)。且可實時檢視使用者線上狀態。 伺服器:centos 6.5、tomcat 7 客戶

flex+blazeds+java後臺訊息(簡單示例)

現在有個問題需要大家思考一下,有個已經上線了的專案,有好好幾千甚至上萬的客戶在使用了。現在專案開發商想釋出一個通知。在今天下午6點需要重新啟動伺服器,想讓線上的人在在預定的時間內都收到訊息,讓大家做好相應的準備,大家會怎麼做? 1、逐個打電話 2、在前臺弄一個定時器,每隔一

SpringBoot2.0整合MQTT訊息功能

        這幾天在弄後端管理系統向指定的Android客戶端推送訊息的功能模組,查閱了網上很多部落格介紹的許多方式,最終選擇基於MQTT協議來實現,MQTT是一個輕量級的訊息釋出/訂閱協議,它是實現基於手機客戶端的訊息推送伺服器的理想解決方案。         實現M

使用androidpn來實現

公司做了一個手機軟體需要及時通知使用者. 本來想找個哥們做個c的長連結服務端,哪想這哥們找了個開源的linux下的c開發的chat服務端給我,還得自己研究文件,再做個使用者關聯介面把chat服務當訊息中轉,麻煩. 上網搜了一下看看有什麼更合適的方案.發現有個開源的andro

Asp.NET MVC 使用 SignalR 實現功能二(Hubs 線上聊天室 獲取儲存使用者資訊)

簡單介紹 在上一篇中,我們只是介紹了簡單的訊息推送,今天我們來修改一下,實現儲存訊息,歷史訊息和使用者線上 使用者登入註冊資訊 當用戶登入之後,我們註冊一下使用者的資訊,我們在ChatHub中 新建一個方法 Register(使用者帳號,使用者密碼) 前臺js呼叫這個方法實現使用者註冊 

Asp.NET MVC 使用 SignalR 實現功能一(Hubs 線上聊天室)

簡介       ASP .NET SignalR 是一個ASP .NET 下的類庫,可以在ASP .NET 的Web專案中實現實時通訊。什麼是實時通訊的Web呢?就是讓客戶端(Web頁面)和伺服器端可以互相通知訊息及呼叫方法,當然這是實時操作的。 WebSockets是HTML5提供的新的API

極光訊息伺服器端開發實現(上)

以前一直使用的極光的手動輸入推送內容然後推送到客戶端,今天遇到了推送頻率比較高且比較有規律的內容,比如事實天氣。這樣就需要用我們自己的伺服器來自動生成推送內容了。 可以看到,上面兩句話很醒目,我們看看它封裝的REST API是個什麼東西,再點進去看看 上面兩句話讀了一

android 用signalr 實現服務

我做的app需要實現signalr 推送服務  有兩種方法 一種人家已經給我們集成了還有視訊教程 第二種自己整合     一共分兩步      第一步我是在activity 裡面實現接收伺服器推送的資料 這兩個是準備工作,下面就是 生成自己需要的包jar  1.O

springboot如何整合mqtt訊息

1.需求分析    近期筆者專案需要用到mqtt實現訊息推送,筆者選擇emq作為mqtt伺服器載體,上篇筆者講解了如何在linux中安裝mqtt服務,安裝連結:https://blog.csdn.net/zhangxing52077/article/details/80567

Progressive Web Apps(PWA)核心技術-使用Firebase Cloud Messaging實現通知

Chrome目前使用Firebase雲訊息傳遞(FCM)作為其推送服務。 FCM最近採用了Web Push協議。 FCM是Google雲訊息傳遞(GCM)的後續產品,支援相同的功能和更多功能。 要使用Firebase雲訊息傳遞,您需要在Firebase上設定專