我真的很需要这个问题的帮助,并且按照最通常的建议,我已经研究和研究了好几天,但我不知道出了什么问题...
话虽如此,我正在使用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引脚。所有董事会应有共同立场。
任何更多的阅读指南,代码更改或图书馆尝试都将非常有用,因为我的挖掘工作无济于事,因为一次又一次的尝试失败了。读者真的是我解决这个阻碍我进一步发展的问题的最后希望。
(关于我的任何问题,请问。-谢谢)
随附文档显示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。