OneNet气象站应用
目的
- 本教程将实现一个气象站的应用,设备把温湿度上传到OneNet,同时OneNet可控制设备上的LED灯亮灭
所用模块
代码
/***
* 资源ID表:
* http://www.openmobilealliance.org/wp/OMNA/LwM2M/LwM2MRegistry.html
***/
#include <NBIOTAT.h>
#include "userDef.h"
#include "lwm2mObjs.h"
#ifdef OLEDDisplay
#include "oled.h"
#endif
void setup()
{
Serial.begin(UARTSPEED);
nbiotSerial.begin(UARTSPEED);
pinMode(LED_Pin, OUTPUT);
#ifdef OLEDDisplay
u8g2.begin();
#endif
#ifdef OLEDDisplay
showOLED(str_imei, str_imsi, "SIM Ready", rssi);
#endif
//检查SIM卡是否识别
while (!nbiot.isSIMReady())
{
Serial.println("SIM ERROR");
delay(2000);
}
Serial.println("SIM OK");
#ifdef OLEDDisplay
showOLED(str_imei, str_imsi, "SIM OK", rssi);
#endif
//获取IMEI
strcpy(str_imei, nbiot.queryIMEI());
Serial.print("IMEI:");
Serial.println(str_imei);
#ifdef OLEDDisplay
showOLED(str_imei, str_imsi, "IMEI", rssi);
#endif
//获取IMSI
strcpy(str_imsi, nbiot.queryCIMI());
Serial.print("IMSI:");
Serial.println(str_imsi);
#ifdef OLEDDisplay
showOLED(str_imei, str_imsi, "IMSI", rssi);
#endif
//获取频段
Serial.print("band:");
Serial.println(nbiot.queryNband());
#ifdef OLEDDisplay
showOLED(str_imei, str_imsi, "Attach...", rssi);
#endif
//等待附着基站...
Serial.println("Waitting for Attaching");
while (!nbiot.queryCGATT())
{
Serial.print(".");
delay(3000);
}
Serial.println();
Serial.println("Attach OK");
#ifdef OLEDDisplay
showOLED(str_imei, str_imsi, "Attach OK", rssi);
#endif
//获取信号强度
rssi = nbiot.queryCSQ();
Serial.print("rssi:");
Serial.println(rssi);
//用户自定义OneNet资源列表
prv_create_lwm2m_objs();
#ifdef OLEDDisplay
showOLED(str_imei, str_imsi, "custom Objs", rssi);
#endif
//关闭Socket
Serial.print("close:");
Serial.println(nbiot.MIPLCLOSE(refId));
//删除资源列表
Serial.print("delete:");
Serial.println(nbiot.MIPLDELETE(refId));
//创建socket
refId = nbiot.MIPLCREATE();
Serial.print("refId:");
Serial.println(refId);
#ifdef OLEDDisplay
showOLED(str_imei, str_imsi, "Create", rssi);
#endif
//上传资源列表到OneNet
nbiot.uploadResourceList();
#ifdef OLEDDisplay
showOLED(str_imei, str_imsi, "upload", rssi);
#endif
//初始化上报信息
initNotifyToOneNet();
#ifdef OLEDDisplay
showOLED(str_imei, str_imsi, "init", rssi);
#endif
}
void loop()
{
//设置生命周期为永远
nbiot.lifeForever();
//接收消息启动
nbiot.reciverEnable();
// 如果有写操作下发
if (nbiot.writeClicked())
{
//执行写操作相应功能
writeAction(&nbiot.oneNetMessage);
#ifdef OLEDDisplay
showOLED(str_imei, str_imsi, "write", rssi);
#endif
}
// 如果有读操作下发
if (nbiot.readClicked())
{
//执行读操作相应功能
readAction(&nbiot.oneNetMessage);
#ifdef OLEDDisplay
showOLED(str_imei, str_imsi, "read", rssi);
#endif
}
//间隔执行上报信息操作
if (timerlastTime > millis())
timerlastTime = millis();
if (millis() - timerlastTime > INTERVAL_timer)
{
//更新温湿度并上报
tempHumiUpdate();
#ifdef OLEDDisplay
showOLED(str_imei, str_imsi, "notify", rssi);
#endif
timerlastTime = millis();
}
}
用户自定义代码
注意问题
- 出厂默认的波特率是9600,如果无法通讯,请更换波特率试试;
- 数据通讯格式一定还要设置成“\r\n”,回车换行模式。