5.寫入Google試算表(一)

1.首先先要在Google Drive內安裝Google APPS Script

2.先在搜索列中鍵入Apps Script搜尋 再按 + 連接

3.回到Google雲端硬碟,新增一個Google Apps Script 專案

4.先按左上角替專案命名,然後按確定

5.再程式碼編寫區貼入 下列程式碼,但需要將「你的試算表網址」作替換

程式碼如下:

function doGet(e) {

var params = e.parameter;

var data = params.data;

var SpreadSheet = SpreadsheetApp.openByUrl('你的試算表網址'); //此處填入Google試算表的網址

var Sheet = SpreadSheet.getSheetByName('工作表1'); //此處填入試算表的標籤名稱

var LastRow = Sheet.getLastRow(); //資料上舊下新

//Sheet.insertRowBefore(1); //資料上新下舊

//寫入資料

data = data.split(',');

data.forEach(function(e,i){

Sheet.getRange(LastRow+1, i+1).setValue(e); //(開啟資料上舊下新模式)

//Sheet.getRange(1, i+1).setValue(e); //(開啟資料上新下舊模式)

});

//return ContentService.createTextOutput(1); //接收成功以後回傳"1"(類似Tingspeak)

}

6.新增一個試算表(要自動填入的試算表)

7.複製試算表的網址Url

8.把剛剛貼入的程式碼的這裡換成你的試算表的網址Url

9.接著按發布-->部署為網路應用程式

10.將應用程式設定專案版本,指定信箱,指定授權對象

11.一定要按 核對權限,不然就不用玩惹

12.指定登入帳戶(編輯Google 試算表的權限)

13.按允許

14. 一定要把部署的這個網址給複製下來

複製下來的網址:

https://script.google.com/macros/s/AKfycbyymzTqKiMK68u5gg4TIioFp3ctRdDrqCJ2Dtl4euAkN4IxsXuG/exec

現在你有這個網址以後,

你可以嘗試連接

https://script.google.com/macros/s/AKfycbyymzTqKiMK68u5gg4TIioFp3ctRdDrqCJ2Dtl4euAkN4IxsXuG/exec?data=567,890

因為我們將用GET法傳送數值,所以在複製下的網址後面加入 ?data=567,890,

GET法本身就是透過URL來傳送訊息

15.在網址列貼入上述網址

16.如果你設定沒錯的話,資料應該能進來Google 試算表了

此時先別高興太早,ESP8266要對Google 發出GET請求時常無法正確動作

必須先作轉址的動作(Google對於GET法傳遞資料加密較嚴格)

請先到 https://www.pushingbox.com/index.php 申請一個API

作為Redirect

17.先登入你的Google 帳號 (虛擬登入你的帳號的機器在傳遞資料)

18.先按My Services 然後 Add a service

19.

20.

21.

22,

23.

24.

25.

26.

複製的DevID 為v308773F457B8240

基本上現在只要輸入

http://api.pushingbox.com/pushingbox?devid=v308773F457B8240&data=234,567

就會在試算表中端輸入資料

ESP8266端 (TX)

Arduino端(TX)

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,16,2);

/////////////////////////////////////////////////////

#define host "192.168.1.254"

//#define host "10.233.95.178"

#define timing 1000 //建議1000毫秒一組數據

/////////////////////////////////////////////////////

unsigned long t1,t2;

int i=0;

String A,B ;

void lcd_disp(String data1,String data2){

lcd.setCursor(0,0);

lcd.print(" ");

lcd.setCursor(0,0);

lcd.print("A=");

lcd.print(data1);

lcd.print(" B=");

lcd.print(data2);

}

void send_host(){

Serial.print("D");

Serial.print(host);

Serial.print("E");

Serial.flush();

}

void setup() {

Serial.begin(9600);

lcd.init();

lcd.backlight();

lcd.clear();

do{

send_host();

delay(200);

lcd.setCursor(0,1);

lcd.print("waiting...");

}while(!Serial.find("OK"));

lcd.setCursor(0,1);

lcd.print("host ok!");

t1=millis();

}

void loop() {

t2=millis();

if(t2>t1+timing){

A="";

B="";

i++;

A=String(i);

B=String(analogRead(A0));

Serial.print("A");

Serial.print(A);

Serial.print("B");

Serial.print(B);

Serial.print("C");

Serial.flush();

lcd_disp(A,B);

lcd.setCursor(0,1);

lcd.print("Sending Data...");

t1=t2;

}

}

#include <Arduino.h>

#include <ESP8266WiFi.h> // 提供Wi-Fi功能的程式庫

#include <ESP8266HTTPClient.h>

#include <ESP8266WiFiMulti.h>

////////////////////////////

#define SSID "tomorrows"

#define PASSWORD "----"

#define devid "v6275D911F32E961"

////////////////////////////

ESP8266WiFiMulti WiFiMulti;

WiFiServer server(80); // 宣告網站伺服器物件與埠號

const int httpPort = 80;

unsigned long t1,t2;

String cmd, data_A,data_B,host;

int A=0 , B=0 , C=0 , D=0 , E=0;

void data_to_RX(String data3, String data4){

String url = "http://api.pushingbox.com/pushingbox?devid=";

url+=devid;

url+="&data=";

url+=data3;

url+=",";

url+=data4;

// This will send the request to the server

Serial.println(url);

if((WiFiMulti.run() == WL_CONNECTED)) {

HTTPClient http;

http.begin(url);

int httpCode = http.GET();

if(httpCode > 0) {

if(httpCode == HTTP_CODE_OK) {

String payload = http.getString();}

} else {}

http.end(); }}

void rec_cmd(){

cmd="" ;

while(Serial.available()){

char c = Serial.read();

cmd+= c;

delay(10);}

if(cmd.charAt(0)=='A'){

data_A="" , data_B="";

for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='A'){A=i;}}

for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='B'){B=i;}}

for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='C'){C=i;}}

for(int i=A+1 ; i<B ; i++){data_A +=cmd.charAt(i);}

for(int i=B+1 ; i<C ; i++){data_B +=cmd.charAt(i);}

data_to_RX(data_A , data_B);

}

if(cmd.charAt(0)=='D'){

host="";

for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='D'){D=i;}}

for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='E'){E=i;}}

for(int i=D+1 ; i<E ; i++){host +=cmd.charAt(i);}

}

Serial.print("OK");}

void setup() {

Serial.begin(9600);

WiFiMulti.addAP(SSID, PASSWORD);

}

void loop(){

if(Serial.available()){

rec_cmd();}

}