【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
#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;
char recvBuffer;
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 = {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++;
}
}
}
}
8、打开arduino IDE,选择开发板的型号和串口,将修改后的代码下载到开发板中。打开串口监视器,将波特率设为115200。在发送框中输入“hello”,点击发送。
在MQTT服务器上可以看到终端设备发送的“hello”。在发送新消息的消息发送框中输入“this message”,点击发送。
至此,基于NB-IOT的MQTT服务器简单通信实验完成。
楼主又给我们开辟了新航道 hnyzcj 发表于 2018-4-17 08:15
楼主又给我们开辟了新航道
哈哈,谢谢。 这个好。 ricky 发表于 2018-4-17 10:50
这个好。
谢谢。 好像有个板子试试。。。。。。。。。 gray6666 发表于 2018-4-17 15:21
好像有个板子试试。。。。。。。。。
可以呀, 是不是没有外接9v电源 代码就上传不了啊 我一直卡在Fail to Attach service这一步,是怎么回事 这个实用 class DFRobot_SIM7000' has no member named 'setNet 出现这个怎么解决?
页:
[1]