娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

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

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

一. 初識LiLyGO T-CALL

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

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

2.SIM800L開關(guān)機(jī)引腳接在ESP32的GPIO4引腳

3.SIM800L復(fù)位引腳接在ESP32的GPIO5引腳

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

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

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


#include #define MODEM_RST 5       //SIM800L復(fù)位引腳接在GPIO5#define MODEM_PWRKEY 4    //SIM800L開關(guān)機(jī)引腳接在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);   //開關(guān)機(jī)鍵引腳


  // 先打開SIM800L的電源

  digitalWrite(MODEM_POWER_ON, HIGH);


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

  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());

  }}

三. 更進(jìn)一步 用tinyGSM庫操作SIM800L

這里我們使用了庫 tinyGSM

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

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


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


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


#include #define MODEM_RST 5       //SIM800L復(fù)位引腳接在GPIO5#define MODEM_PWRKEY 4    //SIM800L開關(guān)機(jī)引腳接在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)建一個關(guān)聯(lián)到SerialAT的SIM800L模型TinyGsm modem(SerialAT);//初始化SIM800Lvoid setupModem(){

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

  pinMode(MODEM_PWRKEY, OUTPUT);   //開關(guān)機(jī)鍵引腳


  // 先打開SIM800L的電源

  digitalWrite(MODEM_POWER_ON, HIGH);


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

  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物理開機(jī)

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

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

  String modemInfo = modem.getModemInfo();

  SerialMon.print('Modem: ');

  SerialMon.println(modemInfo);

  

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

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

  while (!modem.waitForNetwork(240000L))

  {

    SerialMon.print('.');

    delay(500);

  }

  SerialMon.println(' OK');


  //測試關(guān)閉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)絡(luò)并將數(shù)據(jù)上傳至OneNet平臺

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


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


連接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復(fù)位引腳接在GPIO5#define MODEM_PWRKEY 4    //SIM800L開關(guān)機(jī)引腳接在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相關(guān)定義-------------------------------------*/#define TINY_GSM_MODEM_SIM800 // Modem is SIM800//引入TinyGSM庫. 在引入之前要定義好TINY_GSM_MODEM_SIM800,讓它知道我們用的模塊型號#include // 創(chuàng)建一個關(guān)聯(lián)到SerialAT的SIM800L模型TinyGsm modem(SerialAT);// 創(chuàng)建一個GSM型的網(wǎng)絡(luò)客戶端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/*-------------------------------云平臺相關(guān)定義-------------------------------------*/const char *mqtt_server = '183.230.40.39'; //onenet 的 IP地址#define mqtt_devid '626108102'             //設(shè)備ID#define mqtt_pubid '370025'                //產(chǎn)品ID#define mqtt_password 'test123'            //鑒權(quán)信息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);   //開關(guān)機(jī)鍵引腳


  // 先打開SIM800L的電源

  digitalWrite(MODEM_POWER_ON, HIGH);

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

  digitalWrite(MODEM_PWRKEY, HIGH);

  delay(100);

  digitalWrite(MODEM_PWRKEY, LOW);

  delay(1000);

  digitalWrite(MODEM_PWRKEY, HIGH);

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

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

  //連接網(wǎng)絡(luò)

  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準(zhǔn)備好了

    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)絡(luò)斷了,不可能連上了, 把數(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]
關(guān)鍵字:ESP32  Arduin 引用地址:玩轉(zhuǎn) ESP32 + Arduino (十九) SIM800L調(diào)試(基于TTGO T-CALL)

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

推薦閱讀最新更新時間:2025-06-03 18:03

玩轉(zhuǎn) ESP32 + Arduino (九) ESP32 低功耗藍(lán)牙BEL
一. 藍(lán)牙基礎(chǔ)知識 1. 藍(lán)牙4.0和BLE的區(qū)分 通常在了解一點藍(lán)牙的朋友看來,往往將BLE等同于藍(lán)牙4.0,其實不然。 藍(lán)牙4.0是協(xié)議,4.0是協(xié)議版本號,藍(lán)牙4.0是2010年6月由SIG(Special Interest Group)發(fā)布的藍(lán)牙標(biāo)準(zhǔn),它有2種模式: BLE(Bluetooth low energy)只能與4.0協(xié)議設(shè)備通信,適應(yīng)節(jié)能且僅收發(fā)少量數(shù)據(jù)的設(shè)備(如家用電子); BR/EDR(Basic Rate / Enhanced Data Rate),向下兼容(能與3.0/2.1/2.0通信),適應(yīng)收發(fā)數(shù)據(jù)較多的設(shè)備(如耳機(jī))。這個模式常常也有人稱之為“傳統(tǒng)藍(lán)牙”或“經(jīng)典藍(lán)牙”。 可以這樣理解,藍(lán)牙4.0協(xié)
[單片機(jī)]
ESP32學(xué)習(xí)筆記(42)——硬件定時器接口使用
一、簡介 ESP32 芯片包含兩個硬件定時器組。每組有兩個通用硬件定時器。它們都是基于 16 位預(yù)分頻器和 64 位遞增/遞減計數(shù)器的 64 位通用定時器,能夠自動重新加載。 ESP-IDF 編程指南——通用定時器 二、API說明 以下硬件定時器接口位于 driver/include/driver/timer.h。 2.1 timer_init 2.2 timer_set_counter_value 2.3 timer_set_alarm_value 2.4 timer_enable_intr 2.5 timer_isr_register 2.6 timer_start 2.7 timer_get_co
[單片機(jī)]
樂鑫ESP32 IoT典型應(yīng)用產(chǎn)品—阿里釘釘智能考勤機(jī)上市
集微網(wǎng)消息,2017年5月9日,阿里巴巴在杭州DING峰會上正式發(fā)布釘釘發(fā)布M1智能考勤機(jī),這款產(chǎn)品面向企業(yè)和公司,是公司的“打卡神器”,市場售價為299元。據(jù)悉,這是樂鑫與阿里合作的落地項目,是第一款 ESP32 作為 YOC 參與的產(chǎn)品。 M1智能考勤機(jī)支持Wi-Fi無線連接,還支持手機(jī)極速打卡(手機(jī)打開釘釘路過考勤機(jī)即可完成打卡)。此外,還支持異地考勤、自動生成報表等功能。它能夠?qū)⑺锌记趯徟鷶?shù)據(jù)打通,自動生成工資結(jié)算報表。官方數(shù)據(jù)顯示,150人的工資結(jié)算只需1天就能完成,使用釘釘M1智能云考勤機(jī)可一鍵導(dǎo)入釘釘通訊。 釘釘 M1 智能考勤機(jī),雖然并不是第一款應(yīng)用樂鑫 ESP32 的產(chǎn)品,但它卻是第一款 ESP32 作
[手機(jī)便攜]
樂鑫信息科技獲得 CEVA 藍(lán)牙IP授權(quán)許可用于ESP32 IoT芯片
專注于智能互聯(lián)設(shè)備的全球領(lǐng)先信號處理IP授權(quán)公司CEVA宣布,為物聯(lián)網(wǎng)(IoT)應(yīng)用提供低功耗無線解決方案的領(lǐng)先無晶圓廠半導(dǎo)體企業(yè)樂鑫信息科技已經(jīng)獲得授權(quán)許可,在新的ESP32芯片中部署RivieraWaves藍(lán)牙雙模技術(shù)。 樂鑫信息科技公司總部位于上海,專注于創(chuàng)造創(chuàng)新的多功能解決方案,以期在廣泛的產(chǎn)品中實現(xiàn)低成本無線連接。新的ESP32組合式芯片集成了802.11b/g/n Wi-Fi 和 CEVA藍(lán)牙4.2雙模,并通過功能豐富的GPIO以實現(xiàn)系統(tǒng)靈活性。ESP32設(shè)計用于超低功耗應(yīng)用,瞄準(zhǔn)移動設(shè)備、可穿戴電子產(chǎn)品和物聯(lián)網(wǎng)應(yīng)用。 樂鑫信息科技首席執(zhí)行官Teo Swee Ann表示: IoT是一系列快速增長的具有碎片化
[物聯(lián)網(wǎng)]
樂鑫信息科技獲得 CEVA 藍(lán)牙IP授權(quán)許可用于<font color='red'>ESP32</font> IoT芯片
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 连州市| 阜新| 务川| 阳泉市| 依安县| 阿克陶县| 云林县| 鸡西市| 宁城县| 沅江市| 饶平县| 龙山县| 勐海县| 丰宁| 景泰县| 土默特左旗| 吉木萨尔县| 兰考县| 茌平县| 东莞市| 永泰县| 卢湾区| 盱眙县| SHOW| 青河县| 白朗县| 会理县| 怀化市| 西华县| 常熟市| 肃南| 巴塘县| 潮州市| 凉城县| 玛曲县| 贵定县| 蒙阴县| 西乌珠穆沁旗| 广州市| 柏乡县| 蓬安县|