首先說下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,可以點擊下面的鏈接: