我如何将ESP32连接到A6 GSM模块?

问题描述 投票:0回答:1

我真的很需要这个问题的帮助,并且按照最通常的建议,我已经研究和研究了好几天,但我不知道出了什么问题...

话虽如此,我正在使用ESP-32S(pinout)和A6 GSM模块的项目中工作。 (pinout)我正在尝试连接它们,以使A6将数据发送到ThingSpeak ...我的问题是我无法使其正常工作...我使用的是两者之间的配置完全相同ESP8266,它可以连接并正常工作,但与ESP32S似乎似乎不起作用...

下面是我用来将32连接到A6的代码,所有内容都表示成功并通过,但它不会使用任何方法更改任何ThingSpeak值...

#define TINY_GSM_MODEM_A6

#include "TinyGsmClient.h"
#include "ThingSpeak.h"


#define SerialMon Serial

HardwareSerial SerialAT(1);

bool modemConeted;

// Your GPRS credentials
// Leave empty, if missing user or pass
const char apn[]  = "wireless.twilio.com";
const char user[] = "";
const char pass[] = "";

bool dataSent = false;

TinyGsm modem(SerialAT);

TinyGsmClient client(modem);

void setup(){
  SerialMon.begin(9600);
  delay(1000);
  gsmModSetup();
}

void gsmModSetup() {

  // Set GSM module baud rate
  SerialAT.begin(9600, SERIAL_8N1, 27, 26, false); //27 and 26 are the pins on the ESP32S connected to the U_Rxd/U_Txd pins of A6
  delay(3000);

  SerialMon.println("Initializing modem...");
  modem.init();
  delay(3000);

  String modemInfo = modem.getModemInfo();
  SerialMon.print("Modem: ");

  SerialMon.println(modemInfo);


  SerialMon.print("Waiting for network...");
  if (!modem.waitForNetwork()) {
    SerialMon.println(" fail");
    delay(10000);
    return;
  }
  SerialMon.println(" OK");
  SerialMon.print("Connecting to ");
  SerialMon.print(apn);

  if (!modem.gprsConnect(apn, user, pass)) {
    SerialMon.println(" fail");
    delay(5000);
    return;
  }
  SerialMon.println(" OK");
}

void loop(){

}

我正在使用装有数据的Twilo Sim卡(如上所述,它可与esp8266一起使用,因此不适用于SIM卡而不是主板)。此代码唯一没有通过的部分是表示GPRS连接的部分。它永远不会说通过或失败。它坐了大约五分钟,然后继续。

[此后,我尝试发布到ThingSpeak,它显示ThingSpeak错误307,这意味着无法连接到ThingSpeak ...我尝试了2种不同的方法

我发现的简单而又正常的方式

ThingSpeak.setField(1, temp);
ThingSpeak.setField(2, h);
ThingSpeak.setField(3, p);
ThingSpeak.setField(4, pt);
ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);

然后以更复杂的方式连接到服务器,然后发送GET命令并将所有值与字符串放在一起。

if (client.connect(thingSpeakAddress, 80))
  {
    client.print("POST /update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("X-THINGSPEAKAPIKEY: " + WriteAPIKey + "\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(thingSpeakData.length());
    client.print("\n\n");

    client.print(thingSpeakData);

  }
client.stop();

但仍无法正常工作,我也不知道该怎么做...我的A6使用GPIO26和27连接到32,它们连接到A6的U_Rxd / U_Txd引脚。所有董事会应有共同立场。

任何更多的阅读指南,代码更改或图书馆尝试都将非常有用,因为我的挖掘工作无济于事,因为一次又一次的尝试失败了。读者真的是我解决这个阻碍我进一步发展的问题的最后希望。

(关于我的任何问题,请问。-谢谢)

arduino gsm esp32
1个回答
0
投票

随附文档显示GSP01 / GIPO03引脚上的HW串行0 RX / TX,GIPO09 / GIPO10上的HW串行1 RX / TX的ESP32S引脚鉴于您目前未连接其他硬件,为什么不尝试使用基本配置与serial1一起阅读:https://github.com/G6EJD/ESP32-Using-Hardware-Serial-Ports,并使用最新的核心ESP32软件包(截至今天23.3.2020为1.04,以前的发行版存在串行问题。不要忘记设置串行,与本文中的esp8266不同! )关于代码兼容性的问题。如果您在两个平台上都使用代码,则必须使用

#ifdef ESP32
          //configure serial for esp32
#elif ESP8266
        //configure serial for esp8266
#else
#error "Hardware not supported"
#endif

这里有一个小的测试例程,仅用于串行通信。如果您在串行监视器的输入行中键入内容,则应在输出窗口中进行镜像]

#include <HardwareSerial.h>

void setup() {
  Serial.begin(9600);
  // set the data rate for the HardwareSerial port
  Serial2.begin(9600);
}

void loop() {
  if (Serial2.available()) {
    Serial.write(Serial2.read());
  }
  if (Serial.available()) {
    Serial2.write(Serial.read());
  }
}

然后您可以将serial2扩展到您的设置。如果失败,则可能是由于:U1UXD未使用,可用于您的项目。但是,某些主板使用此端口进行SPI Flash访问-因此请尝试Serial3。

© www.soinside.com 2019 - 2024. All rights reserved.