如何解决我如何使用 ESP8266 通过此代码将另外 2 个参数上传到谷歌表?
我修改了此代码,因此我可以使用 nodeMCU esp8266 将 3 个单独的数据字段上传到 google 表格中的 3 个不同列。但是,当我尝试通过制作更改再添加一个要上传的字段时,
char column_name_in_sheets[ ][20] =Ω{"value1","value2","value3","value4"};
和
int No_of_Parameters = 4;
代码在运行时不起作用,即使它没有给出编译错误。我也已经在谷歌表中进行了正确的更改。请帮我解决这个问题。以下是我使用的 3 个代码文件。
主要代码
#include "TRIGGER_WIFI.h" /*Includes ESP8266WiFi.h and WiFiClientSecure.h*/
#include "TRIGGER_GOOGLESHEETS.h" /*Library file for Google Sheets,*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/**********Google Sheets Definations***********/
char column_name_in_sheets[ ][20] = {"value1","value3"}; /*1. The Total no of column*/
String Sheets_GAS_ID = "AKfycbyocUugTtq6wgfgwBpIdsGZJLEGPhVaHY7mKAtjAtFkisbHWV20JmWqjizo1_jvzv7gEJ"; /*This is the Sheets GAS ID*/
int No_of_Parameters = 3;
/*********************************************/
/*Ultrasonic Sensor data*/
const int trigP = 2; //D4 Or GPIO-2 of nodemcu
const int echoP = 0; //D3 Or GPIO-0 of nodemcu
long duration;
int distance;
int level;
int maxL=430;
/*********************************************/
void setup()
{
Serial.begin(9600);
while (!Serial);
WIFI_Connect("MyNetwork","abc123"); /* Wi-Fi SSID and password*/
Google_Sheets_Init(column_name_in_sheets,Sheets_GAS_ID,No_of_Parameters );
/*********************************************/
/*Ultrasonic Sensor data*/
pinMode(trigP,OUTPUT); // Sets the trigPin as an Output
pinMode(echoP,INPUT); // Sets the echoPin as an Input
/*********************************************/
}
void loop()
{
/*********************************************/
/*Ultrasonic Sensor data*/
digitalWrite(trigP,LOW); // Makes trigPin low
delayMicroseconds(2); // 2 micro second delay
digitalWrite(trigP,HIGH); // tigPin high
delayMicroseconds(10); // trigPin high for 10 micro seconds
digitalWrite(trigP,LOW); // trigPin low
duration = pulseIn(echoP,HIGH); //Read echo pin,time in microseconds
distance= duration*0.034/2; //Calculating actual/real distance
level = maxL - distance; //Calculating waret level
Serial.print("Distance = "); //Output distance on arduino serial monitor
Serial.println(distance);
Serial.print("Duration = "); //Output distance on arduino serial monitor
Serial.println(duration);
//delay(3000); //Pause for 3 seconds and start measuring distance again
/*********************************************/
float a = distance,b = 1,c = level;
Data_to_Sheets(No_of_Parameters,a,b,c);
Serial.println();
delay(5000); /*5s delay*/
}
触发 Google Sheet 代码
#ifndef _TRIGGER_GOOGLESHEETS_H_
#define _TRIGGER_GOOGLESHEETS_H_
#include <stdarg.h>
#include <string.h>
void sheets_initialization();
void Send_Data();
void Google_Sheets_Init(char array_2d[10][20],String sheets_gas_id,int param_size);
String url;
char column_name[ ][20]={"x","y"};;
double random_values[100];
void float_to_string();
const char* host = "script.google.com";
const int httpsPort = 443;
char Sensor_Values[10][10];
const char* fingerprint = "46 B2 C3 44 9C 59 09 8B 01 B6 F8 BD 4C FB 00 74 91 2F EF F6";
String GAS_ID;
int Count;
void Google_Sheets_Init(char test[ ][20],int param_size)
{
GAS_ID = sheets_gas_id;
Count = param_size;
for (int i = 0; i < Count; i++)
{
for (int j = 0; j < 20; j++)
{
column_name[i][j] = test[i][j];
}
}
#ifdef Debug_Serial_Mon
for(int i=0;i<Count;i++)
{
Serial.print("column_name= ");
Serial.println(column_name[i]);
}
#endif
}
void Data_to_Sheets(int num,...)
{
va_list lst;
va_start(lst,num);
for(int i=0;i<num;i++)
{
random_values[i]= va_arg(lst,double);
}
va_end(lst);
float_to_string();
Send_Data();
}
void float_to_string()
{
for(int j=0;j<Count;j++)
{
sprintf(Sensor_Values[j],"%.02f",random_values[j]);
#ifdef Debug_Serial_Mon
Serial.print("Sensor Values : ");
Serial.println(Sensor_Values[j]);
#endif
}
}
void Send_Data()
{
sheets_initialization();
String url = "/macros/s/" + GAS_ID + "/exec?";
int i=0;
while(i!=Count)
{
if(i==0)
{
url = url+column_name[i]+"="+Sensor_Values[i];
i++;
}
if(i==Count)
break;
url = url+"&"+column_name[i]+"="+Sensor_Values[i];
i++;
}
Serial.print("requesting URL: ");
Serial.println(url);
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"User-Agent: BuildFailureDetectorESP8266\r\n" +
"Connection: close\r\n\r\n");
#ifdef Debug_Serial_Mon
Serial.println("request sent");
#endif
while (client.connected())
{
String line = client.readStringUntil('\n');
if (line == "\r")
{
#ifdef Debug_Serial_Mon
Serial.println("headers received");
#endif
break;
}
}
String line = client.readStringUntil('\n');
if (line.startsWith("{\"state\":\"success\""))
{
#ifdef Debug_Serial_Mon
Serial.println("esp8266/Arduino CI successfull!");
#endif
}
else
{
#ifdef Debug_Serial_Mon
Serial.println("esp8266/Arduino CI has failed");
#endif
}
#ifdef Debug_Serial_Mon
Serial.println("reply was:");
Serial.println("==========");
Serial.println(line);
Serial.println("==========");
Serial.println("closing connection");
#endif
}
void sheets_initialization()
{
client.setInsecure();
#ifdef Debug_Serial_Mon
Serial.print("connecting to ");
Serial.println(host);
#endif
if (!client.connect(host,httpsPort))
{
#ifdef Debug_Serial_Mon
Serial.println("connection failed");
#endif
return;
}
if (client.verify(fingerprint,host))
{
#ifdef Debug_Serial_Mon
Serial.println("certificate matches");
#endif
}
else
{
#ifdef Debug_Serial_Mon
Serial.println("certificate doesn't match");
#endif
}
}
#endif
wifi 代码
#ifndef __TRIGGER_WIFI_H__
#define __TRIGGER_WIFI_H__
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
//const char* ssid = "AliensAreReal"; // name of wifi
//const char* password = "bimsara2007"; // wifi password
WiFiClientSecure client;
#define Debug_Serial_Mon
void WIFI_Connect(const char* wifi_id,const char *wifi_password)
{
#ifdef Debug_Serial_Mon
Serial.print("connecting to ");
Serial.println(wifi_id);
#endif
WiFi.mode(WIFI_STA);
WiFi.begin(wifi_id,wifi_password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
#ifdef Debug_Serial_Mon
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
#endif
}
#endif
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。