วิธีส่งข้อมูลจาก NodeMCU ไปยัง Google ชีต
เผยแพร่แล้ว: 2020-08-26การส่งข้อมูลเซ็นเซอร์โดยใช้เฟิร์มแวร์ NodeMCU ผ่านอินเทอร์เน็ตไปยังสเปรดชีต Google ชีตนั้นสะดวกมาก ซึ่งสามารถทำได้ผ่านสคริปต์ของ Google และมีประโยชน์ในการไม่ต้องเสียค่าใช้จ่ายใดๆ เมื่อเทียบกับทางเลือกอื่นในการจัดเก็บข้อมูลบนคลาวด์
สำหรับวัตถุประสงค์ของบทความนี้ เราจะแสดงโปรเจ็กต์ง่ายๆ สำหรับการส่งการอ่านค่าอุณหภูมิโดยใช้ ESP8266 และเซ็นเซอร์อุณหภูมิและความชื้น DHT11
ตั้งค่า Google ชีตของคุณ
ขั้นแรก คุณจะต้องสร้างสเปรดชีตใหม่ ลงชื่อเข้าใช้บัญชี Google ของคุณ ไปที่ My Drive และเปิดสเปรดชีตเปล่า
คัดลอกคีย์ URL สำหรับสเปรดชีตของคุณ ตั้งชื่อสเปรดชีตให้เข้าใจง่าย ไปที่โปรแกรมแก้ไขสคริปต์ ใต้เมนูเครื่องมือ
ตั้งชื่อให้กับสคริปต์ของคุณ (ย้ำอีกครั้งว่าให้เข้าใจง่าย โดยเฉพาะอย่างยิ่งหากคุณทำมากกว่าหนึ่งโปรเจ็กต์) ใช้สคริปต์ที่กำหนดและคัดลอกและวางลงในโปรแกรมแก้ไขสคริปต์ของ Google
ใต้บรรทัด ID สเปรดชีต ให้วางคีย์ URL จากสเปรดชีตที่บันทึกไว้
บันทึกสคริปต์และปรับใช้เป็นแอป คุณจะพบตัวเลือกนี้ใต้เมนูเผยแพร่ กำหนดค่าพารามิเตอร์การปรับใช้เพื่อให้แน่ใจว่าสเปรดชีตจะทำงานได้อย่างถูกต้อง
- บันทึก “URL ของแอปพลิเคชันเว็บปัจจุบัน”
- บันทึกเวอร์ชันโปรเจ็กต์เป็นเวอร์ชันใหม่สำหรับการแก้ไขสคริปต์ทั้งหมด (ซึ่งจะทำให้ Google สามารถอัปเดตการแก้ไขใดๆ ที่คุณอาจทำในอนาคต)
- สำหรับช่อง Execute the app as ให้เพิ่มลิงต่อไปนี้ “ฉัน (ที่อยู่ Gmail ของคุณ)”
- สำหรับช่องใครมีสิทธิ์เข้าถึงแอป ให้เพิ่มบรรทัดต่อไปนี้ "ใครก็ได้ แม้แต่ผู้ไม่ระบุชื่อ"
รหัสสำหรับการตั้งค่าเซ็นเซอร์ 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 จะตอบสนองออกไป
- สร้างบัญชี PushingBox หากคุณยังไม่มี
- ใช้ที่อยู่ Gmail ที่คุณใช้สำหรับโครงการข้อมูลเซ็นเซอร์ NodeMCU
- ไปที่บริการของฉัน
- เพิ่มบริการใหม่จากตัวเลือกเพิ่มบริการ
- เลื่อนไปที่ตัวเลือกสุดท้ายชื่อ CustomURL ตั้งค่าบริการของคุณเอง!
- กรอกข้อมูลในช่องที่ต้องการชื่อ URL และวิธี
- สำหรับวิธีการนี้ ให้เลือก GET
- สำหรับ URL ให้ใช้ URL ที่ขึ้นต้นด้วย “script.google.com…” จาก URL ที่สร้างขึ้นเมื่อคุณสร้างที่อยู่ Google Scrip
- ส่งบริการและไปที่สถานการณ์ของฉัน
- ป้อนชื่อที่ใช้งานง่ายแล้วกดปุ่มเพิ่ม
- เพิ่มการดำเนินการเมื่อได้รับแจ้งบนหน้าจอ
- กำหนดค่าวิธีการ GET โดยการจัดรูปแบบชื่อให้กับตัวแปรแต่ละตัว ขั้นตอนนี้จะแตกต่างกันไปขึ้นอยู่กับจำนวนเซ็นเซอร์ที่คุณบันทึกและเซ็นเซอร์ที่กำลังบันทึก
การกำหนดค่าฮาร์ดแวร์
หากคุณใช้เซ็นเซอร์ DHT กับ ESP8266 ให้จ่ายไฟให้กับเครื่องด้วยไฟ 5v แทนที่จะเป็น 3.3v แรงดันไฟฟ้าที่ต่ำกว่าอาจไม่ทำให้คุณอ่านค่าได้ถูกต้อง
เชื่อมต่อพิน 2 และ D4 บน ESP8266 ของคุณ
การกำหนดค่าซอฟต์แวร์
การตั้งค่านี้ใช้งานได้กับ Arduino IDE โดยควรเป็นเวอร์ชันที่ใหม่กว่า 1.6.4 นอกจากนี้ยังหมายความว่าคุณต้องดาวน์โหลดไลบรารีบางส่วนในระบบของคุณ
ห้องสมุดสามารถพบได้ตามลิงค์ต่อไปนี้:
- hhtps://github.comesp8266/Arduino/tree/master/libraries/ESP8266WiFi
- https://learn.adafruit.com/dht
ขั้นตอนต่อไปเกี่ยวข้องกับการอัปโหลดร่าง Arduino และกำหนดค่าสำหรับโปรเจ็กต์และอุปกรณ์ของคุณ มีเพียงสามฟิลด์ที่เกี่ยวข้องที่คุณต้องจัดรูปแบบและปรับแต่งสำหรับโครงการของคุณ:
- เครือข่ายไวไฟ
- รหัสผ่าน Wi-Fi
- รหัส PushingBox
คุณเข้าใกล้การถ่ายโอนข้อมูล NodeMCU อย่างไร
มีหลายวิธีในการทำเช่นนี้และมีเซ็นเซอร์ประเภทต่างๆ มากมายที่คุณสามารถใช้เพื่อถ่ายโอนข้อมูลโดยใช้ ESP8266 ที่มีเฟิร์มแวร์ NodeMCU ไปยัง Google ชีตหรือแพลตฟอร์มระบบคลาวด์อื่นๆ ได้โดยตรง
คุณชอบที่จะเขียนสคริปต์และโค้ดของคุณเองเพื่อปรับแต่งโปรเจ็กต์ของคุณ หรือคุณค้นหาสคริปต์ที่ได้รับการยืนยันทางออนไลน์บน GitHub และแพลตฟอร์มอื่นๆ แล้วปรับเปลี่ยนจากที่นั่น แจ้งให้เราทราบรหัสและแหล่งที่มาของสคริปต์ที่คุณชื่นชอบรวมถึง ESP8266 และชุดเซ็นเซอร์ในส่วนความคิดเห็นด้านล่าง