物聯網之“BC28 + ONENET + MQTT ”遇到的BUG和解決之法

首先說下NB卡,NB卡簡稱窄帶物聯卡,與4G卡不一樣。

NB卡是低流量,多次數觸發的,用NB卡的設備適合不移動、低功耗。而4G卡是大流量大數據的,使用該卡的設備適合移動型、偏遠地區等。

再說下BC28這NB模塊板子,全網通模組。我用的電信NB卡,秒入網秒連接onenet,有的大佬說移動的更適合,電信的會限制某些IP,這個情況沒遇到過,所以不好下定論了。

做過NB模塊的都知道,目前NB還未出現自帶MCU的模組,大多都是單片機AT指令去驅動NB。

又由於AT的各種版本的加入,由最開始的入網、SMS、PSM到添加的TCP、CoAP再到現在09版本的MQTT、LWM2M。

固定的AT到現在的OpenCPU開發,OpenCPU其實也是一種可編譯的AT編程而已。

羅嗦了這麼多,只是簡略的介紹下BC28的產生歷程,熟悉這些的請自動忽略。

總結下“BC28 + ONENET + MQTT ”這個項目遇到的問題點:

1.單片機+BC28,每次做“AT+QMTPUB=xxxx”後會出現“>”,然後按照規格書說需要再加“0x1A”纔可以發送數據。

這個是一位大佬提供的思路:

char str[100] = {0};

int len = 0;

len = sprintf(str,"Hello world");

str[len++] = 0x1A;

uart_send(str,len);

解決之法:其實07及以後的版本里,都是有這麼一個AT指令的:AT+QMTPUBEX=0,0,0,0,TOPIC,Data

這個直接發送數據,不用等待什麼反饋,豈不是很方便嗎?

2.BC28不常遇到的問題,但偶爾會遇到。

a.當"AT+QMTCONN=0,clientid,user,password"時,會出現"+QMTCONN:0,2 ","+QMTSTAT: 0,3",那說明你的BC28沒有從基站進入ip,解決的方法:1.是不是NB卡欠費了;2.檢查NB卡有沒有信號;3.基站是不是出問題,如附近大片區域停電導致的(我就是遇到這種情況的。)

b.當一切可以運行了,可以正常發送數據到服務器,然後突然給你反饋個“+QMTSTAT: 0,1”,這說明斷開ONENET了,需要重新連接,估計後面固件版本會優化。重新連接的邏輯處理:先QMTOPEN再QMTCONN,此時發現會有ERROR出現,那麼先QMTCLOSE,然後再QMTOPEN、QMTCONN等操作。

c.上面的情況如果都沒有出現,那麼BC28發送基本沒有問題,而接收數據這個就有個大問題了,單片機不仔細編程的話,很難找出問題點了!

當你發現發送規定的AT指令都會反饋"OK"ERROR",這說明UART串口沒有任何問題,但是當接收服務器發發來的數據,卻不能收到+QMTRECV帶來的數據,此時你可能發現TOPIC沒有任何錯誤呀,反饋也是"OK",按照循序走,發送也正常的呀!但是容易疏忽的是你的SUB(訂閱)的TOPIC有沒有帶雙引號,如果沒有帶雙引號,那麼會訂閱不成功,必須要帶雙引號纔行。

這個問題困擾了我許久,我在串口助手也試着都不用帶雙引號的參數,結果就是訂閱不成功,其他都非常正常,這是目前BC28的一個隱藏的bug。

目前只有這麼幾個問題,如果還有別的問題出現,我會及時更新這篇文章,也歡迎大家在下方留言,說說你出現的問題或者解決方法。

需要最新的BC28JAR01A09或者重溫BC28JAR01A07,還有BC28_OpenCPU_Hi1_SDK_V1.0,可以點擊下面的鏈接:

BC2807和BC2809版本以及BC28_OPCPU_V1.0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章