วิธีส่งข้อมูลจาก NodeMCU ไปยัง Google ชีต

เผยแพร่แล้ว: 2020-08-26
วิธีส่งข้อมูลจาก NodeMCU ไปยัง Google ชีต

การส่งข้อมูลเซ็นเซอร์โดยใช้เฟิร์มแวร์ NodeMCU ผ่านอินเทอร์เน็ตไปยังสเปรดชีต Google ชีตนั้นสะดวกมาก ซึ่งสามารถทำได้ผ่านสคริปต์ของ Google และมีประโยชน์ในการไม่ต้องเสียค่าใช้จ่ายใดๆ เมื่อเทียบกับทางเลือกอื่นในการจัดเก็บข้อมูลบนคลาวด์

สำหรับวัตถุประสงค์ของบทความนี้ เราจะแสดงโปรเจ็กต์ง่ายๆ สำหรับการส่งการอ่านค่าอุณหภูมิโดยใช้ ESP8266 และเซ็นเซอร์อุณหภูมิและความชื้น DHT11

ตั้งค่า Google ชีตของคุณ

ขั้นแรก คุณจะต้องสร้างสเปรดชีตใหม่ ลงชื่อเข้าใช้บัญชี Google ของคุณ ไปที่ My Drive และเปิดสเปรดชีตเปล่า

คัดลอกคีย์ URL สำหรับสเปรดชีตของคุณ ตั้งชื่อสเปรดชีตให้เข้าใจง่าย ไปที่โปรแกรมแก้ไขสคริปต์ ใต้เมนูเครื่องมือ

โปรแกรมแก้ไขสคริปต์

ตั้งชื่อให้กับสคริปต์ของคุณ (ย้ำอีกครั้งว่าให้เข้าใจง่าย โดยเฉพาะอย่างยิ่งหากคุณทำมากกว่าหนึ่งโปรเจ็กต์) ใช้สคริปต์ที่กำหนดและคัดลอกและวางลงในโปรแกรมแก้ไขสคริปต์ของ Google

รหัสตัวแก้ไขสคริปต์

ใต้บรรทัด ID สเปรดชีต ให้วางคีย์ URL จากสเปรดชีตที่บันทึกไว้

บันทึกสคริปต์และปรับใช้เป็นแอป คุณจะพบตัวเลือกนี้ใต้เมนูเผยแพร่ กำหนดค่าพารามิเตอร์การปรับใช้เพื่อให้แน่ใจว่าสเปรดชีตจะทำงานได้อย่างถูกต้อง

  1. บันทึก “URL ของแอปพลิเคชันเว็บปัจจุบัน”
  2. บันทึกเวอร์ชันโปรเจ็กต์เป็นเวอร์ชันใหม่สำหรับการแก้ไขสคริปต์ทั้งหมด (ซึ่งจะทำให้ Google สามารถอัปเดตการแก้ไขใดๆ ที่คุณอาจทำในอนาคต)
  3. สำหรับช่อง Execute the app as ให้เพิ่มลิงต่อไปนี้ “ฉัน (ที่อยู่ Gmail ของคุณ)”
  4. สำหรับช่องใครมีสิทธิ์เข้าถึงแอป ให้เพิ่มบรรทัดต่อไปนี้ "ใครก็ได้ แม้แต่ผู้ไม่ระบุชื่อ"

รหัสสำหรับการตั้งค่าเซ็นเซอร์ ESP8266 และ DHT11

นี่คือสิ่งที่คุณควรอัปโหลดเมื่อเชื่อมต่อ ESP8266 กับเซ็นเซอร์ DHT11:

#รวม “ESP8266WiFi.h”

#รวม “DHT.h”

#define DHTPIN 2 // พินดิจิทัลที่คุณเชื่อมต่ออยู่

//pin2 ถึง D4 บนบอร์ด esp

// ลบความคิดเห็นในโค้ดสำหรับประเภทเซ็นเซอร์ DHT ที่คุณใช้อยู่

#define DHTTYPE DHT11 // DHT 11

//#define DHTTYPE DHT21 // DHT 21

//#define DHTTYPE DHT22 // DHT 22

DHT dht(DHTPIN,DHTTYPE);

เว็บไซต์ const char[] = “api.pushingbox.com”; //เซิร์ฟเวอร์ PushingBox API

const String devid = “<ของคุณ_Devid_HERE>”; // ID อุปกรณ์จาก Pushingbox

const char* MY_SSID = “<YOUR_WIFI_NAME_HERE”;

const char* MY_PWD = “<ของคุณ_WIFI_PASSWORD_HERE>”;

การตั้งค่าเป็นโมฆะ ()

{

อนุกรม.เริ่มต้น(115200);

dht.begin();

Serial.print("กำลังเชื่อมต่อกับ"+*MY_SSID);

WiFi.เริ่มต้น(MY_SSID, MY_PWD);

Serial.println("กำลังเข้าสู่ wl เชื่อมต่อ");

ในขณะที่ (WiFi.status() != WL_CONNECTED) // ไม่ได้เชื่อมต่อ,..กำลังรอการเชื่อมต่อ

{

ล่าช้า (1,000);

อนุกรม.พิมพ์(“.”);

}

Serial.println("เชื่อมต่อ wl");

Serial.println(“”);

Serial.println(“ยอมรับข้อมูลประจำตัวแล้ว! เชื่อมต่อกับ wifi\n “);

Serial.println(“”);

}

เป็นโมฆะวน()

{

//ให้เวลาผ่านไปมากขึ้นระหว่างการอ่าน

//Google ชีตเติมข้อมูล เพื่อหลีกเลี่ยงการส่งคำขอฟรีเกินจำนวนจาก PushingBox

ล่าช้า (10,000); //10 วินาที (อัตราการสุ่มตัวอย่างเทียบกับโควต้าการเรียกใช้บริการ)

ข้อมูลความชื้นลอย = dht.readHumidity();

// อ่านอุณหภูมิเป็นเซลเซียส (ค่าเริ่มต้น)

float celData = dht.readTemperature();

// อ่านอุณหภูมิเป็นฟาเรนไฮต์ (isFahrenheit = true)

float fehrData = dht.readTemperature (จริง);

// ตรวจสอบความล้มเหลวในการอ่านออกก่อนเวลา (เพื่อลองอีกครั้ง)

ถ้า (isnan (ความชื้นข้อมูล) || isnan (celData) || isnan (fehrData))

{

Serial.println("ไม่สามารถอ่านจากเซ็นเซอร์ DHT!");

กลับ;

}

// คำนวณดัชนีความร้อนเป็นเซลเซียส (isFahreheit = false)

float hicData = dht.computeHeatIndex (celData, ความชื้นข้อมูล, เท็จ);

// คำนวณดัชนีความร้อนเป็นฟาเรนไฮต์ (ค่าเริ่มต้น)

float hifData = dht.computeHeatIndex (fehrData, ความชื้นข้อมูล);

//พิมพ์ไปยังจอภาพแบบอนุกรมหรือเทอร์มินัลที่คุณเลือกที่ 115200 Baud

Serial.print("ความชื้น: ");

Serial.print (ข้อมูลความชื้น);

Serial.print(” %\t”);

Serial.print("อุณหภูมิในเซล:");

Serial.พิมพ์(celData);

Serial.print(” *C “);

Serial.print("อุณหภูมิเป็น Fehr: ");

Serial.print(fehrData);

Serial.print(” *F\t”);

Serial.print("ดัชนีความร้อนใน Cel:");

Serial.print(hicData);

Serial.print(” *C “);

Serial.print("ดัชนีความร้อนใน Fehr: ");

Serial.พิมพ์(hifData);

Serial.print(” *F\n”);

ไคลเอนต์ WiFiClient; // สร้างอินสแตนซ์วัตถุ WiFi

//เริ่มหรือบริการ API โดยใช้ไคลเอนต์ WiFi ของเราผ่าน PushingBox

ถ้า (client.connect (เว็บไซต์ 80))

{

client.print("GET /pushingbox?devid=" + devid

+ “&humidityData=” + (สตริง) humidData

+ “&celData=” + (สตริง) celData

+ “&fehrData=” + (สตริง) fehrData

+ “&hicData=” + (สตริง) hicData

+ “&hifData=” + (สตริง) hifData

);

ลูกค้า println(” HTTP/1.1″);

client.print("โฮสต์:");

ลูกค้า println (เว็บไซต์);

client.println("ตัวแทนผู้ใช้: ESP8266/1.0");

client.println("การเชื่อมต่อ: ปิด");

ลูกค้า println();

}

}

ตัวอย่างโค้ดสคริปต์ของ Google App

นี่คือโค้ดที่คุณต้องใช้เพื่อสร้างสคริปต์ที่สามารถอ่านได้สำหรับการถ่ายโอนข้อมูลเซ็นเซอร์ของคุณ

รับคำร้องขอ:

https://script.google.com/macros/s/<gscriptID ของคุณ>/exec?celData=data_here

HumidityDat, celData,fehrData,hicData, hifData (ตัวแปร GScript, PushingBox และ Arduino ตามลำดับที่คุณควรเขียน)

ฟังก์ชั่น doGet(e) {

Logger.log ( JSON.stringify(e) ); // นี่ใช้สำหรับการดูพารามิเตอร์

ผลลัพธ์ Var = 'ตกลง';

ถ้า (e.parameter == ไม่ได้กำหนด) {

ผลลัพธ์ = 'ไม่มีพารามิเตอร์';

}

อื่น {

Var id= '<URL สเปรดชีตของคุณ\;

แผ่น Var = SpreadsheetApp.openById(id).getActivesheet();

วาร์ newRow = sheet.getLastRow() + 1;

วาร์แถวข้อมูล = [];

//var waktu = วันที่ใหม่ ()'

rowData[0] = วันที่ใหม่ (); //สำหรับการประทับเวลาในคอลัมน์ A

สำหรับ (var param ใน e.parameter) {

logger.log('in for loop, param='+param);

ค่า var = stripQuotes (e.parameter [param]);

สวิตช์ (พารามิเตอร์) {

กรณี 'ข้อมูลความชื้น': //พารามิเตอร์

rowData[1] = ค่า; //ค่าในคอลัมน์ B

หยุดพัก;

กรณี 'celData';

rowData[2] = ค่า;

หยุดพัก;

กรณี 'fehrData':

rowData[3] = ค่า ;

หยุดพัก;

กรณี 'hicData':

rowData[4] = ค่า;

หยุดพัก;

กรณี 'hifData':

rowData[5] = ค่า;

หยุดพัก;

ค่าเริ่มต้น:

result = “พารามิเตอร์ที่ไม่รองรับ”;

}

Logger.log(JSON.stringify(แถวข้อมูล));

Var newRange = sheet.getRange(newRow, 1, 1, rowData.length);

newRange.setValues([ข้อมูลแถว]);

}

กลับ ContentService.createTextOutput (ผลลัพธ์);

}

ฟังก์ชั่น stripQuotes (ค่า) {

ส่งกลับค่าแทนที่ (/^[“']|['|]$/g, “”);

}

ตั้งค่า PushingBox

บริการนี้ทำหน้าที่เป็นตัวกลางระหว่างข้อมูลเซ็นเซอร์ DHT ของคุณกับ Google ชีต เมื่อใช้ PushingBox API คุณสามารถเปลี่ยนข้อมูลที่ส่ง HTTP เป็นข้อมูล HTTPS ที่เข้ารหัสซึ่ง Google รู้จักได้

โปรดทราบว่า PushingBox จำกัดคุณไว้ที่ 1,000 คำขอต่อวัน อย่างไรก็ตาม มันตัดงานหนักและความเชี่ยวชาญที่จำเป็นในการสร้างอัลกอริธึมการเข้ารหัสของคุณเองที่ Google จะตอบสนองออกไป

  1. สร้างบัญชี PushingBox หากคุณยังไม่มี
  2. ใช้ที่อยู่ Gmail ที่คุณใช้สำหรับโครงการข้อมูลเซ็นเซอร์ NodeMCU
  3. ไปที่บริการของฉัน
  4. เพิ่มบริการใหม่จากตัวเลือกเพิ่มบริการ
  5. เลื่อนไปที่ตัวเลือกสุดท้ายชื่อ CustomURL ตั้งค่าบริการของคุณเอง!
  6. กรอกข้อมูลในช่องที่ต้องการชื่อ URL และวิธี
  7. สำหรับวิธีการนี้ ให้เลือก GET
  8. สำหรับ URL ให้ใช้ URL ที่ขึ้นต้นด้วย “script.google.com…” จาก URL ที่สร้างขึ้นเมื่อคุณสร้างที่อยู่ Google Scrip
  9. ส่งบริการและไปที่สถานการณ์ของฉัน
  10. ป้อนชื่อที่ใช้งานง่ายแล้วกดปุ่มเพิ่ม
  11. เพิ่มการดำเนินการเมื่อได้รับแจ้งบนหน้าจอ
  12. กำหนดค่าวิธีการ GET โดยการจัดรูปแบบชื่อให้กับตัวแปรแต่ละตัว ขั้นตอนนี้จะแตกต่างกันไปขึ้นอยู่กับจำนวนเซ็นเซอร์ที่คุณบันทึกและเซ็นเซอร์ที่กำลังบันทึก

การกำหนดค่าฮาร์ดแวร์

หากคุณใช้เซ็นเซอร์ DHT กับ ESP8266 ให้จ่ายไฟให้กับเครื่องด้วยไฟ 5v แทนที่จะเป็น 3.3v แรงดันไฟฟ้าที่ต่ำกว่าอาจไม่ทำให้คุณอ่านค่าได้ถูกต้อง

เชื่อมต่อพิน 2 และ D4 บน ESP8266 ของคุณ

การกำหนดค่าซอฟต์แวร์

การตั้งค่านี้ใช้งานได้กับ Arduino IDE โดยควรเป็นเวอร์ชันที่ใหม่กว่า 1.6.4 นอกจากนี้ยังหมายความว่าคุณต้องดาวน์โหลดไลบรารีบางส่วนในระบบของคุณ

ห้องสมุดสามารถพบได้ตามลิงค์ต่อไปนี้:

  1. hhtps://github.comesp8266/Arduino/tree/master/libraries/ESP8266WiFi
  2. https://learn.adafruit.com/dht

ขั้นตอนต่อไปเกี่ยวข้องกับการอัปโหลดร่าง Arduino และกำหนดค่าสำหรับโปรเจ็กต์และอุปกรณ์ของคุณ มีเพียงสามฟิลด์ที่เกี่ยวข้องที่คุณต้องจัดรูปแบบและปรับแต่งสำหรับโครงการของคุณ:

  1. เครือข่ายไวไฟ
  2. รหัสผ่าน Wi-Fi
  3. รหัส PushingBox

คุณเข้าใกล้การถ่ายโอนข้อมูล NodeMCU อย่างไร

มีหลายวิธีในการทำเช่นนี้และมีเซ็นเซอร์ประเภทต่างๆ มากมายที่คุณสามารถใช้เพื่อถ่ายโอนข้อมูลโดยใช้ ESP8266 ที่มีเฟิร์มแวร์ NodeMCU ไปยัง Google ชีตหรือแพลตฟอร์มระบบคลาวด์อื่นๆ ได้โดยตรง

คุณชอบที่จะเขียนสคริปต์และโค้ดของคุณเองเพื่อปรับแต่งโปรเจ็กต์ของคุณ หรือคุณค้นหาสคริปต์ที่ได้รับการยืนยันทางออนไลน์บน GitHub และแพลตฟอร์มอื่นๆ แล้วปรับเปลี่ยนจากที่นั่น แจ้งให้เราทราบรหัสและแหล่งที่มาของสคริปต์ที่คุณชื่นชอบรวมถึง ESP8266 และชุดเซ็นเซอร์ในส่วนความคิดเห็นด้านล่าง