Чтение данных из 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
- Как подключить ESP8266 с помощью адаптера ESP-01 к Arduino Uno?
- Как установить связь между веб-камерой и Arduino UNO и получать прямую трансляцию на мобильном телефоне с помощью ESP8266?
- ESP8266 - Один сервер, отправляющий данные нескольким клиентам
- Могу ли я использовать выход 3,3 В Arduino напрямую к esp8266?
- WiFiClient::connected() не работает
Почему задержка 4s в конце цикла?, @chrisl
На самом деле этот код скопирован с веб-сайта, я не знаю конкретной функции этой задержки в 4 секунды., @Ansari Aquib