32645| 11
|
[项目] 【IOT专区】基于NB-IOT的MQTT服务器简单通信实验 |
今天我们用一个SIM7000C Arduino NB-IoT/LTE/GPRS 扩展板和MQTT服务器进行通信。这里只是实现的简单的通信,你可以添加更多的功能进去。 材料准备: SIM7000C Arduino NB-IOT/LTE/GPRS 扩展板 ×1 Arduino UNO主控板 ×1 7~12V电源 ×1 库文件下载: DFRobot_SIM DFRobot_SIM7000 首先我们来简要说说MQTT协议。MQTT协议是IBM开发的基于TCP/IP的即时通信协议,可以连接大量的远程传感器和控制设备。 MQTT协议中有三种身份:发布者(Publish)、代理(Broker)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,代理是服务器。这里我们的客户端作为消息发布者和订阅者。客户端与服务器建立连接后,发布其他客户端可能会订阅的信息,服务器接收并转发来自客户端发布的信息,当客户端Subscribe主题(Topic)后,即可订阅服务器的信息。 由于MQTT只是一个协议,不能直接用,需要服务器来运行。这里我们用到已经搭建好的服务器。1、打开DFRobot的MQTT服务器iot.dfrobot.com.cn 2、点击右上角的注册/登录按钮,进行注册和登录。 3、点击如下图红色方框中的眼睛即可查看服务器的用户名和密码。 4、点击添加一个新设备,这里你可以添加多个设备。 5、点击MQTT服务器上的查看详情 6、按照下图连接硬件 7、按照MQTT服务器上的内容修改下面程序中的用户、密码和topic [mw_shl_code=applescript,true]#include <Wire.h> #include <DFRobot_SIM7000.h> #define serverIP "iot.dfrobot.com.cn" #define IOT_CLIENT "test" #define IOT_USERNAME "Sy-L52b3vM" #define IOT_KEY "BJfL5hWhwf" #define IOT_TOPIC "B1vc7qtoz" #define PIN_TX 7 #define PIN_RX 8 SoftwareSerial mySerial(PIN_RX,PIN_TX); DFRobot_SIM7000 sim7000; void setup() { Serial.begin(115200); sim7000.begin(mySerial); sim7000.turnOFF(); if(sim7000.turnON()) //Turn on SIM7000 { Serial.println("Turn on SIM7000 succeed"); }else{ Serial.println("Turn on SIM7000 failed"); while(1); } if(sim7000.setBaudRate(19200)) //set baud rate from 115200 to 19200 { Serial.println("Set SIM7000 baud rate:19200"); }else{ Serial.println("Set SIM7000 baud rate failed"); while(1); } if(sim7000.checkSIMStatus()) //check SIM card { Serial.println("SIM card ready"); }else{ Serial.println("SIM card failed"); while(1); } if(sim7000.setNet(NB)) //Set net mod NB-IOT { Serial.println("Set NB-TOT mode"); }else{ Serial.println("failed to set mode"); while(1); } Serial.print("current signalStrength: "); Serial.println(sim7000.checkSignalQuality()); //Check signal quality form 0 to 30 if(sim7000.attacthService()) //open the connection { Serial.println("Attach service succeed"); }else{ Serial.println("failed to attach service"); while(1); } if(sim7000.connect(TCP, serverIP, 1883)) //Connect to server { Serial.println("Connect succeed"); }else{ Serial.println("Connect failed"); while(1); } if(sim7000.MQTTconnect(IOT_CLIENT, IOT_USERNAME, IOT_KEY)) //Connect to request { Serial.println("Connected"); }else{ Serial.println("Failed to connect"); while(1); } } void loop() { char sendData[30]; char recvBuffer[50]; Serial.println("input data:"); readSerial(sendData); Serial.println(sendData); Serial.println("..................."); if(sim7000.MQTTsend(IOT_TOPIC, sendData)) { Serial.println("Send OK"); }else { Serial.println("Failed to send"); while(1); } if(sim7000.MQTTsubscribe(IOT_TOPIC)) { int i = 0; Serial.println("Subscribe OK! Recive data"); while(i<3) { char recvBuffer[30] = {0}; if(sim7000.MQTTrecv(IOT_TOPIC, recvBuffer, 30)) //Recive data from topic { Serial.print("Recive data:"); Serial.println(recvBuffer); i++; } } sim7000.MQTTunsubscribe(IOT_TOPIC); if(sim7000.recv(recvBuffer, 10, 100)) { Serial.println(recvBuffer); } } delay(5000); } int readSerial(char result[]) { int i = 0; while(1){ while(Serial.available() > 0) { char inChar = Serial.read(); if(inChar == '\n'){ result = '\0'; Serial.flush(); return 0; } if(inChar != '\r'){ result = inChar; i++; } } } } [/mw_shl_code] 8、打开arduino IDE,选择开发板的型号和串口,将修改后的代码下载到开发板中。打开串口监视器,将波特率设为115200。在发送框中输入“hello”,点击发送。 在MQTT服务器上可以看到终端设备发送的“hello”。在发送新消息的消息发送框中输入“this message”,点击发送。 至此,基于NB-IOT的MQTT服务器简单通信实验完成。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed