日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

玩轉(zhuǎn) ESP32 + Arduino (二十) SIM800L上傳數(shù)據(jù)到OneNet(新版Mqtts)

發(fā)布者:ShimmeringStar最新更新時間:2025-04-02 來源: jianshu關鍵字:ESP32  Arduino  SIM800L  OneNet 手機看文章 掃描二維碼
隨時隨地手機看文章

思路同上一篇:

本例程實現(xiàn)了以下功能:


通過SIM800L連接網(wǎng)絡


連接OneNet平臺(通過新版MQTTs協(xié)議)


調(diào)用SHT20的庫采集溫濕度


將溫濕度信息上傳至OneNet


每5分鐘采集一次, 采集完成就休眠


#include #include 'PubSubClient.h'#include 'Ticker.h'#include 'uFire_SHT20.h'/*-------------------------------SIM800L 硬件定義----------------------------------*/#define MODEM_RST 5       //SIM800L復位引腳接在GPIO5#define MODEM_PWRKEY 4    //SIM800L開關機引腳接在GPIO4#define MODEM_POWER_ON 23 //SIM800L電源引腳接在GPIO23#define MODEM_TX 27       //SIM800L串口TX引腳接在GPIO27#define MODEM_RX 26       //SIM800L串口RX引腳接在GPIO26/*-------------------------------其他硬件定義-------------------------------------*/#define LED_G 13uFire_SHT20 sht20;#define SerialMon Serial //調(diào)試串口為UART0#define SerialAT Serial1 //AT串口為UART1/*-------------------------------Modem相關定義-------------------------------------*/#define TINY_GSM_MODEM_SIM800 // Modem is SIM800//引入TinyGSM庫. 在引入之前要定義好TINY_GSM_MODEM_SIM800,讓它知道我們用的模塊型號#include // 創(chuàng)建一個關聯(lián)到SerialAT的SIM800L模型TinyGsm modem(SerialAT);// 創(chuàng)建一個GSM型的網(wǎng)絡客戶端TinyGsmClient gsmclient(modem);PubSubClient client(gsmclient);// Your GPRS credentials (leave empty, if missing)const char apn[] = 'CMNET'; // Your APNconst char gprsUser[] = ''; // Userconst char gprsPass[] = ''; // Passwordconst char simPIN[] = '';   // SIM card PIN code, if any/*-------------------------------云平臺相關定義-------------------------------------*/const char *mqtt_server = '183.230.40.96'; //onenet 的 IP地址const int port = 1883;                     //端口號#define mqtt_devid 'esp_device001'         //設備ID#define mqtt_pubid '370098'                //產(chǎn)品ID//鑒權(quán)信息#define mqtt_password 'version=2018-10-31&res=products%2F370098%2Fdevices%2Fesp_device001&et=4092512761&method=md5&sign=MUV%2BKFLzv81a4Bw6BDrChQ%3D%3D'char msgJson[75]; //要發(fā)送的json格式的數(shù)據(jù)char dataTemplate[] = '{'id':123,'dp':{'temp':[{'v':%.2f}],'humi':[{'v':%.2f}]}}';/*-------------------------------初始化SIM800L-------------------------------------*/void setupModem(){

  pinMode(MODEM_POWER_ON, OUTPUT); //電源引腳

  pinMode(MODEM_PWRKEY, OUTPUT);   //開關機鍵引腳


  // 先打開SIM800L的電源

  digitalWrite(MODEM_POWER_ON, HIGH);

  //根據(jù)手冊要求拉下PWRKEY 1秒鐘以上 可以開機

  digitalWrite(MODEM_PWRKEY, HIGH);

  delay(100);

  digitalWrite(MODEM_PWRKEY, LOW);

  delay(1000);

  digitalWrite(MODEM_PWRKEY, HIGH);

  SerialMon.println('Initializing modem...');

  modem.init(); //開機后modem初始化一下}/*-------------------------------SIM800L連接GPRS-------------------------------------*/void modemToGPRS(){

  //連接網(wǎng)絡

  SerialMon.print('Waiting for network...');

  while (!modem.waitForNetwork(240000L))

  {

    SerialMon.print('.');

    delay(500);

  }

  SerialMon.println(' OK');

  //連接GPRS接入點

  SerialMon.print(F('Connecting to APN: '));

  SerialMon.print(apn);

  while (!modem.gprsConnect(apn, gprsUser, gprsPass))

  {

    SerialMon.print('.');

    delay(10000);

  }

  SerialMon.println(' OK');}/*-------------------------------向云平臺發(fā)送溫濕度數(shù)據(jù)-------------------------------*/void sendTempAndHumi(){

  if (client.connected())

  {

    snprintf(msgJson, 75, dataTemplate, sht20.temperature(), sht20.humidity()); //將模擬溫濕度數(shù)據(jù)套入dataTemplate模板中, 生成的字符串傳給msgJson

    Serial.print('public the data:');

    Serial.println(msgJson);

    client.publish('$sys/370098/esp_device001/dp/post/json', (uint8_t *)msgJson, strlen(msgJson));

    //發(fā)送數(shù)據(jù)到主題

  }}/*-------------------------------向云平臺斷線重連-------------------------------------*/void clientReconnect(){

  if (modem.isNetworkConnected())

  {

    while (!client.connected()) //再重連客戶端

    {

      Serial.println('reconnect MQTT...');

      if (client.connect(mqtt_devid, mqtt_pubid, mqtt_password))

      {

        Serial.println('connected');

      }

      else

      {

        Serial.println('failed');

        Serial.println(client.state());

        Serial.println('try again in 5 sec');

        delay(5000);

      }

    }

  }

  else

  {

    Serial.println('網(wǎng)絡斷了,不可能連上了, 把數(shù)據(jù)存在本地等待下一次聯(lián)網(wǎng)吧');

  }}void setup(){

  pinMode(LED_G, OUTPUT);

  Wire.begin();

  sht20.begin();

  SerialMon.begin(115200);                                //初始化調(diào)試串口

  SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX); //初始化AT串口


  setupModem();  //SIM800L物理開機

  modemToGPRS(); //modem連接GPRS


  //連接OneNet并上傳數(shù)據(jù)

  Serial.println('connecting to OneNet IOT...');

  client.setServer(mqtt_server, port);                   //設置客戶端連接的服務器,連接Onenet服務器, 使用6002端口

  client.connect(mqtt_devid, mqtt_pubid, mqtt_password); //客戶端連接到指定的產(chǎn)品的指定設備.同時輸入鑒權(quán)信息

  if (client.connected())

  {

    client.subscribe('$sys/370098/esp_device001/cmd/request/#'); //訂閱命令下發(fā)主題

    sendTempAndHumi();

  }

  else //如果客戶端沒連接ONENET, 重新連接

    clientReconnect();

  delay(500);

  //進入睡眠

  esp_sleep_enable_timer_wakeup(300000000);

  Serial.println('now sleep');

  esp_deep_sleep_start();}void loop(){

  client.loop();}




關鍵字:ESP32  Arduino  SIM800L  OneNet 引用地址:玩轉(zhuǎn) ESP32 + Arduino (二十) SIM800L上傳數(shù)據(jù)到OneNet(新版Mqtts)

上一篇:玩轉(zhuǎn) ESP32 + Arduino (二十一) SPIFFS文件系統(tǒng) (已棄用)
下一篇:玩轉(zhuǎn) ESP32 + Arduino (十九) SIM800L調(diào)試(基于TTGO T-CALL)

小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved