# 15. 扩展板
## 15.1 4G扩展板 - Air720/Air724
### 15.1.1 API介绍
#### begin() - 确定模块与主板间通信的uart
**语法**
```c++
void begin(HardwareSerial &s_);
```
**参数**
| 传入值 | 说明 | 值范围 |
| :----: | :--: | :-----------: |
| s_ | 串口 | 指定为Serial1 |
#### checkSignalQuality() - 查询信号质量
**语法**
```c++
int checkSignalQuality(void);
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :------: | :----------------------------------------------------------: | ------ |
| 信号质量 | 0:小于等于-115dBm; 1: -111dBm; 2~30: -109~-53dBm: 31: 大于等于-51dBm; 99: 未知或不可测 | int |
#### attachService() - 使模块附着服务
**语法**
```c++
bool attachService(void);
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :----------: | :------------------------------------------: | ---------- |
| 模块服务状态 | true 附着成功,有服务,false附着失败,无服务 | true/false |
#### setBaudRate() - 设置主板与4G模块串口通信的波特率
**语法**
```c++
bool setBaudRate(long rate);
```
**参数**
| 传入值 | 说明 | 值范围 |
| :----: | :--------: | :----------------------------------------------------------: |
| rate | 串口波特率 | 1200、2400、4800、9600、19200、38400、57600、115200、230400、460800、921600、 |
**返回值**
| 返回值 | 说明 | 值范围 |
| :------: | :--------------------------: | ---------- |
| 设置状态 | true 设置成功,false设置失败 | true/false |
#### checkSIMStatus() - 查询SIMS状态
**语法**
```c++
bool checkSIMStatus(void);
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :------: | :--------------------------------------------: | ---------- |
| SIMS状态 | true 表示PIN码锁并未开启,false表示PIN码锁开启 | true/false |
#### openNetwork() - 建立网络连接
**语法**
```c++
bool openNetwork(Protocol ptl, const char *host, int port);
```
**参数**
| 传入值 | 说明 | 值范围 |
| :----: | :----------: | :----------------: |
| ptl | 网络连接模式 | TCP\UDP |
| host | 远端服务器 | IP 地址 或域名皆可 |
| port | 远端服务端口 | int |
**返回值**
| 返回值 | 说明 | 值范围 |
| :----------: | :----------------------------------: | ---------- |
| 网络连接状态 | true 表示连接成功,false表示连接失败 | true/false |
#### send() - 发送网络数据
**语法**
```c++
bool send(void *buffer,size_t len);
```
**参数**
| 传入值 | 说明 | 值范围 |
| :----: | :------: | :----: |
| buffer | 数据 | |
| len | 数据长度 | |
**返回值**
| 返回值 | 说明 | 值范围 |
| :------: | :----------------------------------: | ---------- |
| 发送结果 | true 表示发送成功,false表示发送失败 | true/false |
#### recv() - 发送网络数据
**语法**
```c++
int recv(char* buf, int maxlen, int timeout);
```
**参数**
| 传入值 | 说明 | 值范围 |
| :-----: | :--------------: | :----: |
| buf | 接收数据的buffer | |
| maxlen | 最大数据长度 | |
| timeout | 超时时间 | |
**返回值**
| 返回值 | 说明 | 值范围 |
| :------------: | :--: | ------ |
| 接收的数据长度 | | int |
#### closeNetwork() - 断开网络连接
**语法**
```c++
bool closeNetwork(void);
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :------: | :----------------------------------: | ------ |
| 网络状态 | true 表示断开成功,false表示断开失败 | bool |
#### httpInit() - http初始化
**语法**
```c++
bool httpInit();
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :------------: | :--------------------------------------: | ------ |
| http初始化状态 | true 表示初始化成功,false表示初始化失败 | bool |
#### httpConnect() - 建立http连接
**语法**
```c++
bool httpConnect(const char *Host);
```
**参数**
| 传入值 | 说明 | 值范围 |
| :----: | :---------------: | :----: |
| Host | HTTP 或 HTTPS URL | |
**返回值**
| 返回值 | 说明 | 值范围 |
| :----------: | :----------------------------------: | ------ |
| http连接状态 | true 表示连接成功,false表示连接失败 | bool |
#### httpPost() - 上传http信息
**语法**
```c++
bool httpPost(const char *Host , String data);
```
**参数**
| 传入值 | 说明 | 值范围 |
| :----: | :---------------: | :----: |
| Host | HTTP 或 HTTPS URL | |
| data | 数据 | |
**返回值**
| 返回值 | 说明 | 值范围 |
| :----------: | :-----------------------------: | ------ |
| 上传数据结果 | 表示post成功,false表示post失败 | bool |
#### httpGet() - 获取http信息
**语法**
```c++
char * httpGet(const char *Host);
```
**参数**
| 传入值 | 说明 | 值范围 |
| :----: | :---------------: | :----: |
| Host | HTTP 或 HTTPS URL | |
**返回值**
| 返回值 | 说明 | 值范围 |
| :--------: | :--------------: | ------ |
| 获得的数据 | http information | |
#### httpDisconnect() - 断开http连接
**语法**
```c++
void httpDisconnect(void);
```
#### mqttDisonnect() - 断开mqtt连接
**语法**
```c++
bool mqttDisonnect();
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :----------: | :----------------------------------: | ------ |
| mqtt连接状态 | true 表示断开成功,false表示断开失败 | bool |
#### mqttIPStart() - 建立mqtt的IP连接
**语法**
```c++
bool mqttIPStart(const char *host, int port);
```
**参数**
| 传入值 | 说明 | 值范围 |
| :----: | :----------------: | :----: |
| Host | 服务器的ip或者域名 | |
| port | 端口号 | |
**返回值**
| 返回值 | 说明 | 值范围 |
| :--------------: | :-----------------------------: | ------ |
| mqtt IP 连接状态 | 表示连接成功,false表示连接失败 | bool |
#### mqttIPClose() - 断开mqtt的IP连接
**语法**
```c++
bool mqttIPStart(const char *host, int port);
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :--------------: | :----------------------------------: | ------ |
| mqtt IP 连接状态 | true 表示断开成功,false表示断开失败 | bool |
#### mqttConnect() - 建立mqtt连接
**语法**
```c++
bool mqttConnect(uint16_t keepalive);
```
**参数**
| 传入值 | 说明 | 值范围 |
| :-------: | :----------------------------------------------------------: | :----: |
| keepalive | 保活时间
时间单位:秒 设备端在保活时间内至少需要发送一次报文,包括PING请求。如果服务器端在保活时间内未接收到任何报文,会断开连接,设备端需要发起重连。建议取值在 300s 以上。 | <65535 |
**返回值**
| 返回值 | 说明 | 值范围 |
| :------------: | :----------------------------------: | ------ |
| mqtt 连接状态 | true 表示连接成功,false表示连接失败 | bool |
#### mqttUNSUB() - 取消订阅主题
**语法**
```c++
bool mqttUNSUB(char* iot_topic);
```
**参数**
| 传入值 | 说明 | 值范围 |
| :-------: | :--------: | :----: |
| iot_topic | 订阅的主题 | char* |
**返回值**
| 返回值 | 说明 | 值范围 |
| :----------------: | :----------------------------------: | ------ |
| 取消订阅主题的结果 | true 表示取消成功,false表示取消失败 | bool |
#### mqttSUB() - 订阅主题
**语法**
```c++
bool mqttSUB(char* iot_topic,int qos);
```
**参数**
| 传入值 | 说明 | 值范围 |
| :-------: | :----------------------------------------------------------: | :----: |
| iot_topic | 订阅的主题 | char* |
| qos | 应用程序消息的服务质量
0:at most once delivery for application message
1:at least once delivery for application message
2:exactly once delivery for application message
| 0-2 |
**返回值**
| 返回值 | 说明 | 值范围 |
| :------------: | :----------------------------------: | ------ |
| 订阅主题的结果 | true 表示订阅成功,false表示订阅失败 | bool |
#### mqttPUB() - 发布消息
**语法**
```c++
bool mqttPUB(char* iot_topic,int qos,int retain,String str);
```
**参数**
| 传入值 | 说明 | 值范围 |
| :-------: | :----------------------------------------------------------: | :----: |
| iot_topic | 订阅的主题 | char* |
| qos | 应用程序消息的服务质量
0:at most once delivery for application message
1:at least once delivery for application message
2:exactly once delivery for application message
| 0-2 |
| retain | retain flag
0: the server will restore the application meassge and its QoS
1: the server must not restore the application meassge and must not remove or replace any existing retained message
| 0-1 |
| str | 发布的消息 | |
**返回值**
| 返回值 | 说明 | 值范围 |
| :------------: | :----------------------------------: | ------ |
| 发布消息的结果 | true 表示发布成功,false表示发布失败 | bool |
#### mqttConfig() - mqtt通信配置
**语法**
```c++
bool mqttConfig(char* iot_client, char* iot_username, char* iot_key);
```
**参数**
| 传入值 | 说明 | 值范围 |
| :----------: | :------------------------------------------: | :----: |
| iot_client | client identity (最大 256 个字节) | char* |
| iot_username | username to login server (最大 256 个字节) | char* |
| iot_key | password to login server (最大 256 个字节) | char* |
**返回值**
| 返回值 | 说明 | 值范围 |
| :------------: | :----------------------------------: | ------ |
| 发布消息的结果 | true 表示配置成功,false表示配置失败 | bool |
#### mqttRecv() - mqtt接收订阅主题的消息
**语法**
```c++
bool mqttRecv(char* iot_topic, char* buf,int maxlen);
```
**参数**
| 传入值 | 说明 | 值范围 |
| :-------: | :--------------: | :----: |
| iot_topic | 主题 | char* |
| buf | 接收数据的buffer | char* |
| maxlen | 接收最大长度 | int |
**返回值**
| 返回值 | 说明 | 值范围 |
| :------------: | :----------------------------------: | ------ |
| 接收消息的结果 | true 表示接收成功,false表示接收失败 | bool |
#### reset() - 模块重启
**语法**
```c++
bool reset();
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :----------------: | :--------------------------------------------------: | ------ |
| 重启命令发送的结果 | true 表示重启命令发送成功,false表示重启命令发送失败 | bool |
#### factoryDataReset() - 模块回复出厂设置并重启
**语法**
```c++
bool factoryDataReset();
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :------------: | :------------------------------------------: | ------ |
| 命令发送的结果 | true 表示命令发送成功,false表示命令发送失败 | bool |
#### getSIMtype() - 获取 SIM 卡类型
**语法**
```c++
int getSIMtype();
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :-------: | :-----------------: | ------ |
| SIM卡类型 | 0:SIM; 1: USIM。 | 0-1 |
#### setNTP() - 同步网络时间
**语法**
```c++
int setNTP();
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :------: | :----------------------------------------------------------: | ------ |
| 同步结果 | 1: 网络时间同步成功; 61: 网络错误; 62: DNS 解析错误; 63: 连接错误; 64: 服务响应错误; 65: 服务响应超时; | 0-1 |
#### getCLK() - 获取时钟
**语法**
```c++
char * getCLK();
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :----------: | :--: | ------ |
| 模块系统时间 | | char * |
#### getLocalIP() - 获取本地ip地址
**语法**
```c++
char * getLocalIP();
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :----: | :--: | ------ |
| IP地址 | | char * |
#### queryModuleModel() - 查询模块型号
**语法**
```c++
char * queryModuleModel();
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :------: | :--: | ------ |
| 模块型号 | | char * |
#### queryModuleVersion() - 查询模块版本信息
**语法**
```c++
char * queryModuleVersion();
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :----------: | :--: | ------ |
| 模块版本信息 | | char * |
#### queryIMEI() - 查询 IMEI 号
**语法**
```c++
char * queryIMEI();
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :-----: | :--: | ------ |
| IMEI 号 | | char * |
#### querySIMCardICCID() - 查询 SIM 卡 ICCID 号码
**语法**
```c++
char * querySIMCardICCID();
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :--------: | ---- | ------ |
| ICCID 号码 | | char * |
#### queryFirmWare() - 查询模块 FIRMWARE 版本
**语法**
```c++
char * queryFirmWare();
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :-----------: | ---- | ------ |
| FIRMWARE 版本 | | char * |
#### readLBSInformationAndTime() - 读取基站定位(LBS)信息和时间
**语法**
```c++
char * readLBSInformationAndTime();
```
**返回值**
| 返回值 | 说明 | 值范围 |
| :-----------------------: | ---- | ------ |
| 基站定位(LBS)信息和时间 | | char * |
### 15.1.2 示例程序
#### 例程1:AT指令透传
```c++
/*!
* @file ATTest.ino
* @brief This example use the serial port to send AT command to control the AIR720UH
* With initialization completed, we can enter AT command to AIR720UH directly
* Common AT commands :
* AT+CPIN? : Check SIM card
* AT+CSQ : Check signal quality
* AT+CGATT?: Check net attached state
* AT+CSTT : Start net connect task
* AT+CIFSR : Get local IP
* Get the AT command table in Resource folder :Luat 4G模块AT命令手册V4.3.3.pdf
* Note : The AT command must end with CRLF
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author [yangfeng]
* @version V1.0
* @date 2021-08-18
*/
void setup() {
Serial.begin(115200);
while(!Serial);
Serial1.begin(115200);//The 4G module is connected to the Serial1 of the development board
Serial.println("For example, if you type AT\\r\\n, OK\\r\\n will be responsed!");
Serial.println("Enter your AT command :");
}
void loop() {
while(Serial1.available()){
Serial.write(Serial1.read());
}
while(Serial.available()){
Serial1.write(Serial.read());
}
}
```
#### 例程2: 查询模块基础信息
```c++
/*!
* @file basic.ino
* @brief : This example is used to get basic information about the module and SIM card
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author [yangfeng]
* @version V1.0
* @date 2021-08-18
*/
#include
DFRobot_AIR720UH AIR720UH;
void setup(){
int signalStrength,dataNum;
Serial.begin(115200);
Serial1.begin(115200);
while(!Serial);
AIR720UH.begin(Serial1);
char *buff=NULL;
Serial.print("Module Model:");
buff=AIR720UH.queryModuleModel();
if(buff!=NULL){
Serial.println(buff);
}else{
Serial.println("query module model error!");
while(1);
}
Serial.print("Module Version:");
buff=AIR720UH.queryModuleVersion();
if(buff!=NULL){
Serial.println(buff);
}else{
Serial.println("query module version error!");
while(1);
}
Serial.print("IMEI:");
buff=AIR720UH.queryIMEI();
if(buff!=NULL){
Serial.println(buff);
}else{
Serial.println("query IMEI error!");
while(1);
}
Serial.print("Firmware:");
buff=AIR720UH.queryFirmWare();
if(buff!=NULL){
Serial.println(buff);
}else{
Serial.println("query module firmware error!");
while(1);
}
Serial.println("Check SIM card......");
if(AIR720UH.checkSIMStatus()){ //Check SIM card
Serial.println("SIM card READY");
}else{
Serial.println("SIM card ERROR, Check if you have insert SIM card and restart AIR720UH");
while(1);
}
Serial.print("SIM type:");
int data=AIR720UH.getSIMtype();
if(data==1){
Serial.println("USIM");
}else if(data ==0){
Serial.println("SIM");
}else{
Serial.println("get error");
while(1);
}
Serial.print("ICCID:");
buff=AIR720UH.querySIMCardICCID();
if(buff!=NULL){
Serial.println(buff);
}else{
Serial.println("query SIM card ICCID error!");
while(1);
}
Serial.println("Get signal quality......");
delay(500);
signalStrength=AIR720UH.checkSignalQuality(); //Check signal quality
Serial.print("signalStrength =");
Serial.println(signalStrength);
delay(500);
}
void loop(){
}
```
#### 例程3: http通信
```c++
/*!
* @file httpTest.ino
* @brief : This example verify HTTP connection over a HTTP request
* With initialization completed, we connect to server POST data and GET data
* Thus we finished the HTTP POST and GET verification
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author [yangfeng]
* @version V1.0
* @date 2021-08-18
*/
#include
#define POSTURL "https://fanyi.youdao.com/"
#define GETURL "https://fanyi.youdao.com/"
DFRobot_AIR720UH AIR720UH;
void setup(){
int signalStrength,dataNum;
Serial.begin(115200);
while(!Serial);
Serial1.begin(115200);
AIR720UH.begin(Serial1);
Serial.println("Check SIM card......");
if(AIR720UH.checkSIMStatus()){ //Check SIM card
Serial.println("SIM card READY");
}else{
Serial.println("SIM card ERROR, Check if you have insert SIM card and restart AIR720UH");
while(1);
}
Serial.println("Get signal quality......");
signalStrength=AIR720UH.checkSignalQuality(); //Check signal quality
Serial.print("signalStrength =");
Serial.println(signalStrength);
delay(500);
Serial.println("Init http......");
while(1){
if(AIR720UH.httpInit()){ //Init http service
Serial.println("HTTP init !");
break;
}else{
Serial.println("Fail to init http");
}
}
Serial.print("POST to ");
Serial.println(POSTURL);
String httpbuff = "English";
while(1){
if((httpbuff=AIR720UH.httpPost(POSTURL,httpbuff))!=NULL){ //HTTP POST
Serial.println("Post successed");
break;
}else{
Serial.println("Fail to post");
}
}
Serial.print("GET from ");
Serial.println(GETURL);
Serial.println(AIR720UH.httpGet(GETURL)); //HTTP GET
Serial.println("Disconnect");
AIR720UH.httpDisconnect(); //Disconnect
Serial.println("Close net work");
AIR720UH.closeNetwork(); //Close net work
}
void loop() {
}
```
#### 例程4:TCP通信
```c++
/*!
* @file tcpTest.ino
* @brief : This example validates the TCP connection. The module will connect to the TCP server (IP:120.76.100.197 PORT:10002) for data interaction
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author [yangfeng]
* @version V1.0
* @date 2021-08-18
*/
#include
#include
#define serverIP "120.76.100.197"
#define serverPort 10002
DFRobot_AIR720UH AIR720UH;
char sendData[100];
char buff[100];
void setup(){
int signalStrength,dataNum;
Serial.begin(115200);
Serial1.begin(115200);
while(!Serial);
AIR720UH.begin(Serial1);
Serial.println("Check SIM card......");
if(AIR720UH.checkSIMStatus()){ //Check SIM card
Serial.println("SIM card READY");
}else{
Serial.println("SIM card ERROR, Check if you have insert SIM card and restart AIR720UH");
while(1);
}
Serial.println("Get signal quality......");
delay(500);
signalStrength=AIR720UH.checkSignalQuality(); //Check signal quality
Serial.print("signalStrength =");
Serial.println(signalStrength);
delay(500);
Serial.println("Attaching service......");
while(1){
if(AIR720UH.attachService()){ //Open the connection
Serial.println("Attach service");
Serial.print("Local IP:");
Serial.println(AIR720UH.getLocalIP());
break;
}else{
Serial.println("Fail to Attach service");
delay(1000);
}
}
}
void loop(){
delay(2000);
Serial.println("Connecting......");
if(AIR720UH.openNetwork(TCP,serverIP,serverPort)){ //Start up TCP connection
Serial.println("Connect OK");
}else{
Serial.println("Fail to connect");
return;
}
while(1){
Serial.println("Input data :");
readSerial(sendData);
Serial.println("Send data :");
Serial.println(sendData);
if(AIR720UH.send(sendData,strlen(sendData))){ //Send data to server
Serial.println("Send data, recive :");
AIR720UH.recv(buff,100,5);
Serial.println(buff);
memset(buff,0,100);
}else{
Serial.println("Failed to send");
break;
}
delay(500);
}
Serial.println("Close connection......");
if(AIR720UH.closeNetwork()){ //End the connection
Serial.println("Closed !");
}else{
Serial.println("Fail to close connection");
}
}
int readSerial(char result[]){
int i = 0;
while(1){
while(Serial.available() > 0){
char inChar = Serial.read();
if(inChar == '\n'){
result[i] = '\0';
Serial.flush();
return 0;
}
if(inChar != '\r'){
result[i] = inChar;
i++;
}
}
}
}
```
#### 例程5:mqtt通信
```c++
/*!
* @file mqttTest.ino
* @brief : This example verify MQTT send verification
* With initialization completed, we connect to iot.dfrobot.com.cn
* Then send data to a topic
* Thus we finished the MQTT send verification
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author [yangfeng]
* @version V1.0
* @date 2021-08-18
*/
#include
//Login website (http://iot.dfrobot.com.cn) to register an account ,fill the following information based on your account
#define serverIP "iot.dfrobot.com.cn"
#define IOT_CLIENT "CLIENT_NAME"
#define IOT_USERNAME "YOUR_USERNAME"
#define IOT_KEY "YOUR_KEY"
#define IOT_TOPIC "YOUR_TOPIC"
DFRobot_AIR720UH AIR720UH;
String readSerial(){
int i = 0;
String result;
while(1){
while(Serial.available() > 0){
char inChar = Serial.read();
if(inChar == '\n'){
result += inChar;
while(Serial.read() >= 0);
return result;
}
if(i == 50){
Serial.println("The data is too long");
result += '\0';
while(Serial.read() >= 0);
return result;
}
result += inChar;
i++;
}
}
}
void setup(){
int signalStrength;
Serial.begin(115200);
while(!Serial);
Serial1.begin(115200);
AIR720UH.begin(Serial1);
Serial.println("Check SIM card......");
if(AIR720UH.checkSIMStatus()){ //Check SIM card
Serial.println("SIM card READY");
}else{
Serial.println("SIM card ERROR, Check if you have insert SIM card and restart AIR720UH");
while(1);
}
Serial.println("Get signal quality......");
delay(500);
signalStrength=AIR720UH.checkSignalQuality(); //Check signal quality
Serial.print("signalStrength =");
Serial.println(signalStrength);
delay(500);
Serial.println("Attaching service......");
while(1){
if(AIR720UH.attachService()){ //Open the connection
Serial.println("Attach service");
Serial.print("Local IP:");
Serial.println(AIR720UH.getLocalIP());
break;
}else{
Serial.println("Fail to Attach service");
delay(1000);
}
}
}
void loop(){
if(AIR720UH.mqttConfig(IOT_CLIENT,IOT_USERNAME,IOT_KEY)){
Serial.println("mqttConfig !");
}else{
Serial.println("Failed to mqttConfig");
return;
}
delay(200);
if(AIR720UH.mqttIPStart(serverIP,1883)){ //Config server
Serial.println("mqttIPStart !");
}else{
Serial.println("Failed to mqttIPStart");
AIR720UH.mqttIPClose();
return;
}
Serial.print("Connect to :");
Serial.println(serverIP);
Serial.print("Connect to : ");
Serial.println(IOT_USERNAME);
if(AIR720UH.mqttConnect(60)){ //Connect to server
Serial.println("Connected !");
}else{
Serial.println("Failed to connect");
AIR720UH.mqttDisonnect();
return;
}
if(AIR720UH.mqttSUB(IOT_TOPIC,0)){ //Subscribe to the topic
Serial.println("mqttSUB OK");
}else{
Serial.println("Failed to mqttSUB");
AIR720UH.mqttDisonnect();
return;
}
Serial.println("Input data end with CRLF : ");
String sendData;
sendData= readSerial();
Serial.print("Send data : ");
Serial.print(sendData);
Serial.println(" ......");
if(AIR720UH.mqttPUB(IOT_TOPIC,0,0,sendData)){ //Send data to topic
Serial.println("Send OK");
}else{
Serial.println("Failed to send");
AIR720UH.mqttDisonnect();
return;
}
delay(1000);
char buf[128];
if(AIR720UH.mqttRecv(IOT_TOPIC,buf,128)){
Serial.println("Received a message about the subscription topic:");
Serial.print(buf);
memset(buf,0,sizeof(buf));
}
delay(200);
if(AIR720UH.mqttDisonnect()){ //Close connection
Serial.println("Close connection !");
}else{
Serial.println("Fail to close connection !");
return;
}
delay(2000);
}
```
#### 例程6:获取基站位置和时间信息
```c++
/*!
* @file readLBSInformationAndTime.ino
* @brief : Read base station location (LBS) information and time
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author [yangfeng]
* @version V1.0
* @date 2021-08-18
*/
#include
DFRobot_AIR720UH AIR720UH;
void setup(){
int signalStrength,dataNum;
Serial.begin(115200);
Serial1.begin(115200);
while(!Serial);
AIR720UH.begin(Serial1);
Serial.println("Check SIM card......");
if(AIR720UH.checkSIMStatus()){ //Check SIM card
Serial.println("SIM card READY");
}else{
Serial.println("SIM card ERROR, Check if you have insert SIM card and restart AIR720UH");
while(1);
}
Serial.println("Get signal quality......");
delay(500);
signalStrength=AIR720UH.checkSignalQuality(); //Check signal quality
Serial.print("signalStrength =");
Serial.println(signalStrength);
delay(500);
Serial.println("Base station location (LBS) information and time:");
}
void loop(){
char *buff=AIR720UH.readLBSInformationAndTime();
if(buff!=NULL){
Serial.println(buff);
}
delay(1000);
}
```
#### 例程7:获取网络时间
```c++
/*!
* @file setNTP.ino
* @brief : Synchronizing network Time
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author [yangfeng]
* @version V1.0
* @date 2021-08-18
*/
#include
DFRobot_AIR720UH AIR720UH;
void setup(){
int signalStrength,dataNum;
Serial.begin(115200);
Serial1.begin(115200);
while(!Serial);
AIR720UH.begin(Serial1);
Serial.println("Check SIM card......");
if(AIR720UH.checkSIMStatus()){ //Check SIM card
Serial.println("SIM card READY");
}else{
Serial.println("SIM card ERROR, Check if you have insert SIM card and restart AIR720UH");
while(1);
}
Serial.println("Get signal quality......");
delay(500);
signalStrength=AIR720UH.checkSignalQuality(); //Check signal quality
Serial.print("signalStrength =");
Serial.println(signalStrength);
delay(500);
Serial.println("set NTP ...");
while(1){
int data=AIR720UH.setNTP();
if(data==1){
Serial.println("The network time is synchronized successfully!");
break;
}else if(data ==61){
Serial.println("Network error");
break;
}else if(data ==62){
Serial.println("DNS resolution error");
break;
}else if(data ==63){
Serial.println("Connection error");
break;
}else if(data ==64){
Serial.println("Service response error");
break;
}else if(data ==65){
Serial.println("Service response time out");
break;
}else{
Serial.println("set error");
}
}
}
void loop(){
char *buff = AIR720UH.getCLK();
if(buff!=NULL){
Serial.println(buff);
}
}
```