Чтение данных из Google Таблиц с помощью Nodemcu
Я хочу читать и записывать данные в таблицы Google с помощью ESP8266 WIfi Nodemcu, и я могу это сделать, но временной интервал между двумя строками записи составляет 3 секунды, что слишком много. Я могу читать данные, но я могу читать только первую строку, а не любые другие строки, которые я не могу прочитать, даже изменяя параметры URL.
Вот мой код -
#include "ESP8266WiFi.h" #include "HTTPSRedirect.h" #include "DebugMacros.h" // Заполните ssid и пароль вашими сетевыми данными const char* ssid = "Леобототехника"; const char* пароль = "leobotics123"; инт листвлажный = 1; интервал времени листа = 2; инт листакв = 3; Строка readaqu = ""; const char* host = "script.google.com"; // Замените на свой собственный идентификатор скрипта, чтобы внести изменения на стороне сервера const char *GScriptId = "AKfycbyu_JnX7F29Ea5cZUy7HdsFbv9W5UmedmNbhTwt5tznwRUiQhYS"; const int httpsPort = 443; // эхо | openssl s_client -connect script.google.com:443 |& openssl x509 -fingerprint -noout const char* отпечаток = "ED:83:75:6B:83:FE:01:DE:BA:72:84:05:71:FA:CE:54:FB:6E:23:CA"; //const uint8_t finger[20] = {}; // Запись в таблицу Google String url = String("/macros/s/") + GScriptId + "/exec?value=Hello"; // Получаем события Календаря Google на 1 неделю вперед String url2 = String("/macros/s/") + GScriptId + "/exec?cal"; // Чтение из таблицы Google String url3 = String("/macros/s/") + GScriptId + "/exec?read"; String payload_base = "{\"command\": \"добавить строку\", \ \"имя_листа\": \"Лист1\", \ \"ценности\": "; Полезная нагрузка строки = ""; HTTPSRedirect* клиент = nullptr; // используется для хранения значений свободного стека и кучи // перед созданием экземпляра объекта HTTPSRedirect // чтобы их можно было записать в листы Google // при создании экземпляра беззнаковое целое free_heap_before = 10; беззнаковое целое число free_stack_before = 20; недействительная установка () { Серийный.начать(115200); Serial.print("Подключение к Wi-Fi: "); Serial.println(ssid); WiFi.begin(ssid, пароль); в то время как (WiFi.status ()! = WL_CONNECTED) { delay(500); Серийный.принт("."); } Серийный.println(""); Serial.println("Wi-Fi подключен"); // Serial.println("IP-адрес: "); // Serial.println(WiFi.localIP()); // Используйте класс HTTPSRedirect для создания нового соединения TLS клиент = новый HTTPSRedirect (httpsPort); клиент->setInsecure(); клиент->setPrintResponseBody(true); клиент->setContentTypeHeader("приложение/json"); Serial.print("Подключение к"); Serial.println(хост); // Попытаться подключиться максимум 5 раз логический флаг = ложь; for (int i=0; iconnect(host, httpsPort); если (ретвал == 1) { флаг = правда; перерыв; } еще Serial.println("Ошибка подключения. Повторная попытка..."); } если (!флаг){ Serial.print("Не удалось подключиться к серверу: "); Serial.println(хост); Serial.println("Выход..."); возвращаться; } } недействительный цикл () { отправка данных(); статический интервал ошибок_счетчик = 0; статический интервал connect_count = 0; const беззнаковое целое MAX_CONNECT = 20; статический логический флаг = ложь; если (!флаг){ клиент = новый HTTPSRedirect (httpsPort); клиент->setInsecure(); флаг = правда; клиент->setPrintResponseBody(true); клиент->setContentTypeHeader("приложение/json"); } если (клиент != nullptr){ если (!клиент->подключен()){ клиент->подключить(хост, httpsPort); payload = payload_base + "\"" + sheetaqu + "," + sheetTemp + "," + sheetHumid + "\"}"; клиент->POST(url2, host, payload, false); } } еще{ DPRINTLN("Ошибка создания объекта клиента!"); число_ошибок = 5; } если (connect_count > MAX_CONNECT){ количество_подключений = 0; флаг = ложь; удалить клиента; возвращаться; } Serial.println("Получить данные из ячейки 'A1':"); если (клиент-> ПОЛУЧИТЬ (url3, хост)) { ++connect_count; payload = payload_base + "\"" + readaqu + "," + sheetaqu + "," + sheetTemp + "," + sheetHumid + "\"}"; Serial.println("ПОЛУЧЕННЫЕ ДАННЫЕ ПРИВЕДЕНЫ НИЖЕ"); Серийный.println(" "); Серийный.println("1"); Serial.println(readaqu); Серийный.println("2"); Serial.println (листовой); Серийный.println("3"); Serial.println(Время листа); Серийный.println("4"); Serial.println(листВлажный); Серийный.println(" "); Serial.println("ПЕЧАТЬ ПОЛУЧЕНИЯ ДАННЫХ ЗАВЕРШЕНА"); листовая вода++; температура листа++; листВлажный++; } еще{ ++ число_ошибок; DPRINT("Счетчик ошибок при подключении: "); DPRINTLN(счетчик_ошибок); } Serial.println("POST добавить данные памяти в электронную таблицу:"); payload = payload_base + "\"" + sheetaqu + "," + sheetTemp + "," + sheetHumid + "\"}"; if(клиент->POST(url2, host, payload)){ ; } еще{ ++ число_ошибок; DPRINT("Счетчик ошибок при подключении: "); DPRINTLN(счетчик_ошибок); } если (количество_ошибок > 3){ Serial.println("Остановка процессора..."); удалить клиента; клиент = nullptr; } delay(4000); } аннулировать отправку данных () { // Отправляем данные памяти в Google Sheets payload = payload_base + "\"" + sheetaqu + "," + sheetTemp + "," + sheetHumid + "\"}"; клиент->POST(url2, host, payload, false); payload = payload_base + "\"" + sheetaqu + "," + sheetTemp + "," + sheetHumid + "\"}"; клиент->POST(url2, host, payload, false); // Примечание: setup() должна завершиться в течение прибл. 1s, или сторожевой таймер // сбросит чип. Следовательно, не помещайте слишком много запросов в setup() // ссылка: https://github.com/esp8266/Arduino/issues/34 Serial.println("\nGET: записать в ячейку 'A1'"); Serial.println("========================="); // получаем данные электронной таблицы клиент-> ПОЛУЧИТЬ (url, хост); // Отправляем данные памяти в Google Sheets payload = payload_base + "\"" + sheetaqu + "," + sheetTemp + "," + sheetHumid + "\"}"; клиент->POST(url2, host, payload, false); Serial.println("\nGET: Получить данные календаря Google:"); Serial.println("================================"); // получаем данные электронной таблицы клиент-> ПОЛУЧИТЬ (url2, хост); // Отправляем данные памяти в Google Sheets payload = payload_base + "\"" + sheetaqu + "," + sheetTemp + "," + sheetHumid + "\"}"; клиент->POST(url2, host, payload, false); Serial.println("\nСерии запросов GET и POST"); Serial.println("==============================="); // удаляем объект HTTPSRedirect удалить клиента; клиент = nullptr; }
@Ansari Aquib, 👍-2
Обсуждение1 ответ
Лучший ответ:
▲ 2
Я думаю, вам нужно изменить свой скрипт Google для этого листа, чтобы любая функция, которую вы вызываете для получения данных строки, принимала дополнительный параметр для значения строки.
Затем просто добавьте логику Javascript в эту функцию для извлечения данных по этому переданному индексу строки, которые должны быть возвращены.
Имеет ли это смысл?
,
@VicerExciser
Смотрите также:
- Веб-сокеты с ESP8266 с использованием платы Arduino Uno
- Сколько мА / ч в ESP8266-01 Работает в LiPo-аккумуляторе, если функция WI-FI постоянно включена
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Как установить связь между веб-камерой и Arduino UNO и получать прямую трансляцию на мобильном телефоне с помощью ESP8266?
- ESP8266 - Один сервер, отправляющий данные нескольким клиентам
- Могу ли я использовать выход 3,3 В Arduino напрямую к esp8266?
- WiFiClient::connected() не работает
- Ошибка TIMEOUT при подключении ESP8266 к Arduino Uno
Почему задержка 4s в конце цикла?, @chrisl
На самом деле этот код скопирован с веб-сайта, я не знаю конкретной функции этой задержки в 4 секунды., @Ansari Aquib