Mam esp8266 + SIM800L
Mam bibliotekę zrobioną przez któregoś z forumowiczów (dołączam do posta rar-a) która pomaga komunikować się z SIM800L.
Biblioteka umożliwia nawiązanie połączenia z Internetem poprzez SIM800L, ale Supla próbuje łączyć się z siecią poprzez WIFI, zobaczcie na kod plików:
1. supla_srpc.cpp:
funkcja która łączy się serverem supla:
Code: Select all
int result = client->connect(Supla::Channel::reg_dev.ServerName, port);
ciało funkcji connect:
Code: Select all
int Supla::Client::connect(const char *host, uint16_t port) {
if (sslEnabled) {
if (rootCACert == nullptr) {
SUPLA_LOG_WARNING(
"Connecting without certificate validation (INSECURE)");
}
}
SUPLA_LOG_INFO(
"Establishing %sencrypted connection with: %s (port: %d)",
sslEnabled ? "" : "NOT ",
host,
port);
return connectImp(host, port);
}
3. arduino_esp_platform.cpp
ciało funkcji connectImp(host, port); w tym pliku
Code: Select all
int connectImp(const char *host, uint16_t port) override {
WiFiClientSecure *clientSec = nullptr;
#ifdef ARDUINO_ARCH_ESP8266
X509List *caCert = nullptr;
#endif
stop();
if (sslEnabled) {
clientSec = new WiFiClientSecure();
wifiClient = clientSec;
wifiClient->setTimeout(timeoutMs);
#ifdef ARDUINO_ARCH_ESP8266
clientSec->setBufferSizes(1024, 512); // EXPERIMENTAL
if (rootCACert) {
// Set time via NTP, as required for x.509 validation
static bool timeConfigured = false;
if (!timeConfigured) {
configTime(0, 0, "pool.ntp.org", "time.nist.gov");
SUPLA_LOG_DEBUG("Waiting for NTP time sync");
time_t now = time(nullptr);
while (now < 8 * 3600 * 2) {
delay(100);
now = time(nullptr);
}
}
caCert = new BearSSL::X509List(rootCACert);
clientSec->setTrustAnchors(caCert);
} else if (fingerprint.length() > 0) {
clientSec->setFingerprint(fingerprint.c_str());
} else {
clientSec->setInsecure();
}
#else
if (rootCACert) {
clientSec->setCACert(rootCACert);
} else {
clientSec->setInsecure();
}
#endif
} else {
wifiClient = new WiFiClient();
}
int result = wifiClient->connect(host, port);
if (clientSec) {
char buf[200];
int lastErr = 0;
#ifdef ARDUINO_ARCH_ESP8266
lastErr = clientSec->getLastSSLError(buf, sizeof(buf));
#elif defined(ARDUINO_ARCH_ESP32)
lastErr = clientSec->lastError(buf, sizeof(buf));
#endif
if (lastErr) {
SUPLA_LOG_ERROR("SSL error: %d, %s", lastErr, buf);
}
}
#ifdef ARDUINO_ARCH_ESP8266
if (caCert) {
delete caCert;
caCert = nullptr;
}
#endif
return result;
}
W moim pliku .ino podobno wyłączam WIFI
Code: Select all
//Turn off WiFi
WiFi.mode(WIFI_OFF);
Może ktoś z Was pomóc? Jak wyłączyć w esp8266 WIFI?
Pozdrawiam Paweł