Передача данных в Google Sheet
- Войдите на сайт для отправки комментариев
Здравствуйте!
Прошу Вашей помощи:
Была программа для передачи данных в Google Sheet на ESР8266
#include <ESP8266WiFi.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <WiFiClientSecure.h> #include <DHT.h> #include <EEPROM.h> LiquidCrystal_I2C _lcd1(0x27, 20, 4); int _dispTempLength1=0; boolean _isNeedClearDisp1; DHT _dht1(0, DHT22, 11); extern "C" { #include "user_interface.h" } bool En_128741382_1; float data1_float_128741382_1; float data2_float_128741382_1; WiFiClientSecure client_128741382_1; bool _ri__128741382_1= 0; bool _ro__128741382_1= 0; bool ESPControllerWifiClient_HRD = 0; bool ESPControllerWifiClient_status = 1; bool ESPControllerWifiClient_isDHCP = 1; bool ESPControllerWifiClient_IsNeedReconect = 0; bool ESPControllerWifiClient_workStatus = 1; char ESPControllerWifiClient_SSID[40] = "Home"; char ESPControllerWifiClient_password[40] = "147852369"; IPAddress ESPControllerWifiClient_ip(0, 0, 0, 0); IPAddress ESPControllerWifiClient_dns (0, 0, 0, 1); IPAddress ESPControllerWifiClient_gateway (0, 0, 0, 1); IPAddress ESPControllerWifiClient_subnet (255, 255, 255, 0); uint8_t ESPControllerWifiClient_mac[6] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; bool isNeededCommitESP8266EEprom = 0; float _dht1_humOut = 0.00; float _dht1_tempOut = 0.00; unsigned long _dht1Tti = 0UL; bool _gen1I = 0; bool _gen1O = 0; unsigned long _gen1P = 0UL; String _SysParRead_1_Out; int _disp1oldLength = 0; void setup() { Wire.pins(4, 5); Wire.begin(); delay(10); EEPROM.begin(5); if(((readByteFromEEPROM(0, 0, 0x0))) != 163) { (updateByteToEEPROM(0, 0, 0x0, (163))); (updateUnsignedLongToEEPROM(1, 0, 0x0, (0))); EEPROM.commit(); } ESPControllerWifiClient_ip = _ipAddressFromUnsignetLong(readUnsignedLongFromEEPROM(1, 0, 0x0)); WiFi.mode(WIFI_STA); _esp8266WifiModuleClientReconnect(); _lcd1.init(); _lcd1.backlight(); _dht1Tti = millis(); client_128741382_1.setInsecure(); } void loop() { if (_isNeedClearDisp1) { _lcd1.clear(); _isNeedClearDisp1= 0; } if (isNeededCommitESP8266EEprom) { EEPROM.commit(); isNeededCommitESP8266EEprom=0; } if(ESPControllerWifiClient_IsNeedReconect) { _esp8266WifiModuleClientReconnect(); ESPControllerWifiClient_IsNeedReconect = 0; } ESPControllerWifiClient_status = WiFi.status() == WL_CONNECTED; if (ESPControllerWifiClient_status) { if (! ESPControllerWifiClient_HRD) { ESPControllerWifiClient_ip = WiFi.localIP(); ESPControllerWifiClient_subnet = WiFi.subnetMask(); ESPControllerWifiClient_gateway = WiFi.gatewayIP(); ESPControllerWifiClient_dns = WiFi.dnsIP(); WiFi.macAddress(ESPControllerWifiClient_mac); ESPControllerWifiClient_HRD = 1; } } else { ESPControllerWifiClient_HRD = 0; } //Плата:1 if(_isTimer(_dht1Tti, 1000)) { _dht1_humOut = _dht1.readHumidity(); _dht1_tempOut = _dht1.readTemperature(); _dht1Tti = millis(); } if (!(0)) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = millis(); } } else { _gen1I = 0 ; _gen1O= 0; } if (_gen1I) { if (_isTimer (_gen1P , 2000)) { _gen1P = millis(); _gen1O = ! _gen1O; } } En_128741382_1 = _gen1O; data1_float_128741382_1 = _dht1_tempOut; data2_float_128741382_1 = _dht1_humOut; _ro__128741382_1= 0; if ((En_128741382_1) &&(!_ri__128741382_1)) { _ro__128741382_1= 1; } _ri__128741382_1=En_128741382_1; if(_ro__128741382_1) { sendData_128741382_1(data1_float_128741382_1, data2_float_128741382_1); } _SysParRead_1_Out = ESPControllerWifiClient_ip.toString(); if (!(0)) { _dispTempLength1 = ((_SysParRead_1_Out)).length(); if (_disp1oldLength > _dispTempLength1) { _isNeedClearDisp1 = 1; } _disp1oldLength = _dispTempLength1; _lcd1.setCursor(0, 0); _lcd1.print((_SysParRead_1_Out)); } else { if (_disp1oldLength > 0) { _isNeedClearDisp1 = 1; _disp1oldLength = 0; } } } bool _isTimer(unsigned long startTime, unsigned long period) { unsigned long currentTime; currentTime = millis(); if (currentTime>= startTime) { return (currentTime>=(startTime + period)); } else { return (currentTime >=(4294967295-startTime+period)); } } void sendData_128741382_1(float data1, float data2) { if (!client_128741382_1.connect("script.google.com", 443)) { return; } String GAS_ID = "AKfycbyCTL1FLhwijxl5uFc792BEOuqDKsLfQ4TncoEq-8ReRdKV-prp9NpCaLV6oaanhm1QXg"; String string_data1=String(data1); String string_data2=String(data2); String url = "/macros/s/" + GAS_ID + "/exec?temperature=" + string_data1 + "&humidity=" + string_data2; client_128741382_1.print(String("GET ")+url+" HTTP/1.1\r\n"+"Host: "+"script.google.com"+"\r\n"+"User-Agent: BuildFailureDetectorESP8266\r\n"+"Connection: close\r\n\r\n"); while (client_128741382_1.connected()) { String line = client_128741382_1.readStringUntil('\n'); if (line == "\r") { break; } } String line = client_128741382_1.readStringUntil('\n'); line.startsWith("{\"state\":\"success\""); } byte readByteFromEEPROM(int addres, byte bitAddres, byte chipAddres) { return EEPROM.read(addres); } void updateByteToEEPROM(int addres, byte bitAddres, byte chipAddres, byte value) { isNeededCommitESP8266EEprom = 1; return EEPROM.write(addres, value); } unsigned long readUnsignedLongFromEEPROM(int addres, byte bitAddres, byte chipAddres) { byte x[4]; for(byte i = 0; i < 4; i++) { x[i] = readByteFromEEPROM((addres+i), bitAddres, chipAddres); } unsigned long *y = (unsigned long *)&x; return y[0]; } void updateUnsignedLongToEEPROM(int addres, byte bitAddres, byte chipAddres, unsigned long value) { byte *x = (byte *)&value; for(byte i = 0; i < 4; i++) { updateByteToEEPROM((addres+i), bitAddres, chipAddres, x[i]); } } int hexStrToInt(String instring) { byte len = instring.length(); if (len == 0) return 0; int result = 0; for (byte i = 0; i < 8; i++) // только первые 8 цыфар влезуть в uint32 { char ch = instring[i]; if (ch == 0) break; result <<= 4; if (isdigit(ch)) result = result | (ch - '0'); else result = result | (ch - 'A' + 10); } return result; } void _esp8266WifiModuleClientReconnect() { if(_checkMacAddres(ESPControllerWifiClient_mac)) { wifi_set_macaddr(0, const_cast<uint8*>(ESPControllerWifiClient_mac)); } if(ESPControllerWifiClient_isDHCP) { WiFi.config(0U, 0U, 0U, 0U, 0U); } else { WiFi.config(ESPControllerWifiClient_ip, ESPControllerWifiClient_gateway, ESPControllerWifiClient_subnet, ESPControllerWifiClient_dns , ESPControllerWifiClient_dns); } WiFi.begin(ESPControllerWifiClient_SSID, ESPControllerWifiClient_password); } IPAddress _ipAddressFromUnsignetLong(unsigned long value) { IPAddress result; byte *x = (byte *)&value; for (byte i = 0; i < 4; i++) { result[i] = x[i]; } return result; } bool checkIPAdressString(String value) { IPAddress temp; return temp.fromString(value); } IPAddress _ipAddressFromString(String value) { IPAddress temp; temp.fromString(value); return temp; } unsigned long _unsignetLongFromIPAdress(IPAddress value) { byte buufer[4] = {0, 0, 0, 0}; for (byte i = 0; i < 4; i++) { buufer[i] = value[i]; } unsigned long *y = (unsigned long *)&buufer; return y[0]; } bool _checkMacAddres(byte array[]) { bool result = 0; for (byte i = 0; i < 6; i++) { if (array[i] == 255) { return 0; } if (array[i] > 0) { result = 1; } } return result; } void _parseMacAddressString(String value, byte array[]) { int index; byte buffer[6] = {255, 255, 255, 255, 255, 255}; byte raz = 0; String tempString; while ((value.length() > 0) && (raz <= 6)) { index = value.indexOf(":"); if (index == -1) { tempString = value; value = ""; } else { tempString = value.substring(0, index); value = value.substring(index + 1); } buffer[raz] = byte(hexStrToInt(tempString)); raz++; } if (_checkMacAddres(buffer)) { for (byte i = 0; i < 6; i++) { array[i] = buffer[i]; } } } bool _compareMacAddreses(byte array1[], byte array2[]) { for (byte i = 0; i < 6; i++) { if (array1[i] != array2[i]) { return 0; } } return 1; } bool _compareMacAddresWithString(byte array[], String value) { byte buffer[6] = {255, 255, 255, 255, 255, 255}; _parseMacAddressString(value, buffer); return _compareMacAddreses(array, buffer); } bool _checkMacAddresString(String value) { byte buffer[6] = {255, 255, 255, 255, 255, 255}; _parseMacAddressString(value, buffer); return _checkMacAddres(buffer); } String _macAddresToString(byte array[]) { String result = ""; String temp =""; for (byte i = 0; i < 6; i++) { temp=String(array[i],HEX); if (temp.length() < 2) { temp = String("0") + temp; } result = result + temp; if (i < 5) { result = result + String(":"); } } result.toUpperCase(); return result; }
но при переходе на ЕСП 32 вылезла ошибка:
Arduino: 1.8.13 (Windows 7), Плата:"ESP32 Dev Module, Disabled, Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, None"
C:\Users\User\AppData\Local\Temp\ide\pr1\pr1.ino: In function 'void setup()':
pr1:44:24: error: 'class WiFiClientSecure' has no member named 'setInsecure'
client_128741382_1.setInsecure();
^
Несколько библиотек найдено для "WiFi.h"
Используется: D:\User\Загрузки\ide\ideV6\portable\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi
Не используется: d:\User\Загрузки\ide\ideV6\libraries\WiFi
exit status 1'class WiFiClientSecure' has no member named 'setInsecure'
Не подскажите что это может быть?
Вот тут:
error: 'class WiFiClientSecure' has no member named 'setInsecure'
всё написано
угу
А если вбить эту строчку в гугль - первым же ответом вылазит, как это лечить
https://github.com/Links2004/arduinoWebSockets/issues/648
Не подскажите что это может быть?
это называется программирование, друг
Судя по вопросу. ты очень далек от этого...
угу
А если вбить эту строчку в гугль - первым же ответом вылазит, как это лечить
https://github.com/Links2004/arduinoWebSockets/issues/648
Но у меня в проекте не используется WebSockets.
Подскажите как подправить код программы?
Не подскажите что это может быть?
это называется программирование, друг
Судя по вопросу. ты очень далек от этого...
Есть немножко.
угу
А если вбить эту строчку в гугль - первым же ответом вылазит, как это лечить
https://github.com/Links2004/arduinoWebSockets/issues/648
Вам же дали ссылку, там написано буквально следующее: https://github.com/Links2004/arduinoWebSockets/issues/648#issuecomment-803830381
https://github.com/Links2004/arduinoWebSockets/issues/648#issuecomment-804094174
You were right, it was still on 1.0.4. Fixed!
I went to Tools -> Board... -> Boards Manager and updated to 1.0.5.
А на будущее - перепишите на MicroPython благо для ESP32 он существует.
Обновил плату до версии 1.0.6. все компилируется но данные приходят раз в 20 секунд а должно приходить раз в 2 секунды. После 4 записи данных на лист прием данных останавливается.
Что может быть?