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

玩轉 ESP32 + Arduino (十九) SIM800L調(diào)試(基于TTGO T-CALL)

發(fā)布者:溫馨家園最新更新時間:2025-04-07 來源: jianshu關鍵字:ESP32  Arduin 手機看文章 掃描二維碼
隨時隨地手機看文章

一. 初識LiLyGO T-CALL

根據(jù)原理圖, 我們可以得到以下結論

1.SIM800L電源使能引腳接在ESP32的GPIO23引腳

2.SIM800L開關機引腳接在ESP32的GPIO4引腳

3.SIM800L復位引腳接在ESP32的GPIO5引腳

4. SIM800L的串口接在了ESP32的26, 27引腳

二. 實驗1: PC端通過串口調(diào)試助手調(diào)試SIM800L

思路: 串口0收到PC的信息就轉發(fā)給串口1, 串口0 收到串口1的信息就轉發(fā)給PC


#include #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 SerialMon Serial //調(diào)試串口為UART0#define SerialAT Serial1 //AT串口為UART1void setup(){

  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.begin(115200);

  SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX);}void loop(){

  while (SerialAT.available())

  {

    SerialMon.write(SerialAT.read());

  }

  while (SerialMon.available())

  {

    SerialAT.write(SerialMon.read());

  }}

三. 更進一步 用tinyGSM庫操作SIM800L

這里我們使用了庫 tinyGSM

tinyGSM和我們之前的wifi庫差不多

不過多了一個modem(貓)的概念, 就是我們要把SIM800L實例化為一個modem, 像這樣:TinyGsm modem(SerialAT);


下面這個程序主要就是我們創(chuàng)建一個modem并操作他的過程, 順便測試了一下2G網(wǎng)絡連接需要多久(實測10秒左右)


關于client的內(nèi)容并沒有在這個例程里, 下節(jié)再探討.


#include #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 SerialMon Serial //調(diào)試串口為UART0#define SerialAT Serial1 //AT串口為UART1#define TINY_GSM_MODEM_SIM800 // Modem is SIM800//引入TinyGSM庫. 在引入之前要定義好TINY_GSM_MODEM_SIM800,讓它知道我們用的模塊型號#include // 創(chuàng)建一個關聯(lián)到SerialAT的SIM800L模型TinyGsm modem(SerialAT);//初始化SIM800Lvoid 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);}void setup(){

  esp_sleep_enable_timer_wakeup(20000000); //創(chuàng)建一個esp睡眠鬧鐘

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

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


  setupModem(); //SIM800L物理開機

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

  modem.init(); //開機后modem初始化一下

  String modemInfo = modem.getModemInfo();

  SerialMon.print('Modem: ');

  SerialMon.println(modemInfo);

  

  //測試連接網(wǎng)絡

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

  while (!modem.waitForNetwork(240000L))

  {

    SerialMon.print('.');

    delay(500);

  }

  SerialMon.println(' OK');


  //測試關閉SIM800L信號燈

  SerialMon.println('Turning off SIM800 Red LED...');

  modem.sendAT('+CNETLIGHT=0');

  delay(10000);


  //測試打開SIM800L信號燈

  SerialMon.println('Turning on SIM800 Red LED...');

  modem.sendAT('+CNETLIGHT=1');

  delay(10000);


  //去休眠吧

  SerialMon.println('now I wanna ESP32sleep and disable SIM800L for a while!(20sec)');

  delay(100);

  esp_deep_sleep_start();}void loop(){}

四. 使用SIM800L連接2G網(wǎng)絡并將數(shù)據(jù)上傳至OneNet平臺

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


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


連接OneNet平臺(通過舊版MQTT協(xié)議)


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


將溫濕度信息上傳至OneNet


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


#include #include 'PubSubClient.h'#include 'aliyun_mqtt.h'#include 'ArduinoJson.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 SerialMon Serial //調(diào)試串口為UART0#define SerialAT Serial1 //AT串口為UART1/*-------------------------------其他硬件定義-------------------------------------*/#define LED_G 13uFire_SHT20 sht20;/*-------------------------------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.39'; //onenet 的 IP地址#define mqtt_devid '626108102'             //設備ID#define mqtt_pubid '370025'                //產(chǎn)品ID#define mqtt_password 'test123'            //鑒權信息char msg_buf[200];                                     //發(fā)送信息緩沖區(qū)char dataTemplate[] = '{'TEMP':%.2f,'HUMI':%.2f}'; //信息模板char msgJson[75];                                      //要發(fā)送的json格式的數(shù)據(jù)unsigned short json_len = 0;                           //json長度/*-------------------------------初始化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, 40, dataTemplate, sht20.temperature(), sht20.humidity()); //將模擬溫濕度數(shù)據(jù)套入dataTemplate模板中, 生成的字符串傳給msgJson

    json_len = strlen(msgJson);                                                 //msgJson的長度

    msg_buf[0] = char(0x03);                                                    //要發(fā)送的數(shù)據(jù)必須按照ONENET的要求發(fā)送, 根據(jù)要求,數(shù)據(jù)第一位是3

    msg_buf[1] = char(json_len >> 8);                                           //數(shù)據(jù)第二位是要發(fā)送的數(shù)據(jù)長度的高八位

    msg_buf[2] = char(json_len & 0xff);                                         //數(shù)據(jù)第三位是要發(fā)送數(shù)據(jù)的長度的低八位

    memcpy(msg_buf + 3, msgJson, strlen(msgJson));                              //從msg_buf的第四位開始,放入要傳的數(shù)據(jù)msgJson

    msg_buf[3 + strlen(msgJson)] = 0;                                           //添加一個0作為最后一位, 這樣要發(fā)送的msg_buf準備好了

    Serial.print('public message:');

    Serial.println(msgJson);

    client.publish('$dp', (uint8_t *)msg_buf, 3 + strlen(msgJson)); //發(fā)送數(shù)據(jù)到主題$dp

  }}/*-------------------------------向云平臺斷線重連-------------------------------------*/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串口

[1] [2]
關鍵字:ESP32  Arduin 引用地址:玩轉 ESP32 + Arduino (十九) SIM800L調(diào)試(基于TTGO T-CALL)

上一篇:玩轉 ESP32 + Arduino (二十) SIM800L上傳數(shù)據(jù)到OneNet(新版Mqtts)
下一篇:玩轉 ESP32 + Arduino (十八) 采用SIM800L發(fā)送短信和定位(基礎知識)

推薦閱讀最新更新時間:2025-06-30 17:26

玩轉 ESP32 + Arduino(三十) onenet5.0 全新MQTT設備連接體驗
一. 體驗新版更新內(nèi)容 onenet5.0是一個大改版, 連用了多年的LOGO都換掉了, 現(xiàn)在的logo更簡約美觀了 1. OneNET Studio 更新后推出了一個OneNET Studio 的概念, 所有接入服務放在了這里面 進入 OneNET Studio 發(fā)現(xiàn)其整合相當一部分的業(yè)務, 而且分的非常明晰 2. 設備接入 現(xiàn)在, 我們關心的主要內(nèi)容是設備接入 3. 產(chǎn)品管理和創(chuàng)建產(chǎn)品 產(chǎn)品管理界面簡介美觀 添加產(chǎn)品很容易 這里有了第一個概念 OneJson 4. OneJson概念 OneJson 就是OneNet能自動解析的JSON, 如果你按照這個格式上傳json數(shù)據(jù), 會省略上傳數(shù)據(jù)解析過程
[單片機]
玩轉 ESP32 + Arduino (十四) HTTPClient庫訪問網(wǎng)絡資源
我們使用ESP32_Arduino自帶庫: HTTPClient 一. 請求相關API函數(shù) 首先,創(chuàng)建一個客戶端對象 1. 初始化HTTP客戶端 http_client.begin() /** * 解析url以獲得所有參數(shù),默認port是80端口 * @param url String */bool begin(String url);/** * 解析url以獲得所有參數(shù),默認port是80端口 * @param client : 傳入一個網(wǎng)絡連接客戶端 * @param url String */bool begin(WiFiClient &client, String url);/** * 設置host
[單片機]
ESP32學習筆記(47)——加密算法AES/MD5/SHA
一、簡介 1.1 SSL SSL:(Secure Socket Layer,安全套接字層),位于可靠的面向連接的網(wǎng)絡層協(xié)議和應用層協(xié)議之間的一種協(xié)議層。SSL通過互相認證、使用數(shù)字簽名確保完整性、使用加密確保私密性,以實現(xiàn)客戶端和服務器之間的安全通訊。該協(xié)議由兩層組成:SSL記錄協(xié)議和SSL握手協(xié)議。 1.2 TLS TLS:(Transport Layer Security,傳輸層安全協(xié)議),用于兩個應用程序之間提供保密性和數(shù)據(jù)完整性。該協(xié)議由兩層組成:TLS記錄協(xié)議和TLS握手協(xié)議。 1.3 mbed TLS 樂鑫esp-idf框架集成開源的 mbedtls 加密庫。mbedtls 也許是最小巧的SSL代碼庫。高效、便
[單片機]
小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

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