كيفية إرسال البيانات من NodeMCU إلى جداول بيانات Google

نشرت: 2020-08-26
كيفية إرسال البيانات من NodeMCU إلى جداول بيانات Google

يعد إرسال بيانات المستشعر باستخدام البرامج الثابتة NodeMCU عبر الإنترنت إلى جدول بيانات Google Sheets أمرًا مريحًا للغاية. ويمكن القيام بذلك من خلال برنامج نصي من Google، وهو يتميز بأنه لا يكلف شيئًا، على عكس العديد من بدائل التخزين السحابي.

لغرض هذه المقالة، سنعرض لك مشروعًا بسيطًا لإرسال قراءات درجة الحرارة باستخدام ESP8266 وجهاز استشعار درجة الحرارة والرطوبة DHT11.

قم بإعداد ورقة جوجل الخاصة بك

أولاً، ستحتاج إلى إنشاء جدول بيانات جديد. قم بتسجيل الدخول إلى حساب Google الخاص بك، وانتقل إلى My Drive، وافتح جدول بيانات فارغًا.

انسخ مفتاح URL لجدول البيانات الخاص بك. أعط جدول البيانات اسمًا بديهيًا. انتقل إلى محرر البرامج النصية، ضمن القائمة "أدوات".

محرر النص

قم بتسمية البرنامج النصي الخاص بك (مرة أخرى، اجعله بديهيًا، خاصة إذا كنت تقوم بأكثر من مشروع واحد). استخدم البرنامج النصي المحدد وانسخه والصقه في محرر Google Script.

كود محرر البرنامج النصي

ضمن سطر معرف جدول البيانات، الصق مفتاح URL من جدول البيانات المحفوظ.

احفظ البرنامج النصي وقم بنشره كتطبيق. ستجد هذا الخيار ضمن قائمة النشر. قم بتكوين معلمات النشر للتأكد من أن جدول البيانات سيعمل بشكل صحيح.

  1. احفظ "عنوان URL الحالي لتطبيق الويب".
  2. احفظ إصدار المشروع كإصدار جديد لجميع مراجعات البرنامج النصي (وهذا يسمح لـ Google بتحديث أي مراجعات قد تجريها في المستقبل).
  3. بالنسبة إلى الحقل تنفيذ التطبيق كـ، أضف الكلمة التالية "أنا (عنوان Gmail الخاص بك)".
  4. بالنسبة إلى الحقل "من لديه حق الوصول إلى التطبيق"، أضف السطر التالي "أي شخص، حتى لو كان مجهولًا".

رمز لإعداد مستشعر ESP8266 وDHT11

هذا ما يجب عليك تحميله عند توصيل ESP8266 بمستشعر DHT11:

#تشمل "ESP8266WiFi.h"

# تشمل "DHT.h"

#define DHTPIN 2 // ما هو الرقم الرقمي الذي تتصل به

//pin2 إلى D4 على لوحة esp

// قم بإزالة التعليق الموجود في الكود الخاص بنوع مستشعر DHT الذي تستخدمه.

# تعريف DHTTYPE DHT11 // DHT 11

//#تعريف DHTTYPE DHT21 // DHT 21

//#تعريف DHTTYPE DHT22 // DHT 22

دهت دهت (DHTPIN، DHTTYPE)؛

const char WEBSITE[] = "api.pushingbox.com"; // خادم PushingBox API

سلسلة const devid = "<YOUR_Devid_HERE>"; // معرف الجهاز من Pushingbox

const char* MY_SSID = "<YOUR_WIFI_NAME_HERE";

const char* MY_PWD = “<YOUR_WIFI_PASSWORD_HERE>”;

الإعداد باطل()

{

Serial.begin(115200);

dht.begin();

Serial.print("الاتصال بـ "+*MY_SSID);

WiFi.begin(MY_SSID, MY_PWD);

Serial.println("الذهاب إلى اتصال wl");

بينما (WiFi.status() != WL_CONNECTED) // غير متصل،.. في انتظار الاتصال

{

تأخير (1000)؛

Serial.print(".");

}

Serial.println ("متصل wl")؛

Serial.println("");

Serial.println("تم قبول بيانات الاعتماد! متصل بشبكة wifi\n");

Serial.println("");

}

حلقة فارغة()

{

// السماح لمزيد من الوقت بالمرور بين القراءات

// تعبئة ورقة جوجل، لتجنب تجاوز عدد الطلبات المجانية من PushingBox

تأخير (10000)؛ // 10 ثوانٍ، (معدل أخذ العينات مقابل حصة مكالمات الخدمة)

بيانات الرطوبة العائمة = dht.readHumidity();

// قراءة درجة الحرارة بالدرجة المئوية (الافتراضي)

float celData = dht.readTemperature();

// قراءة درجة الحرارة بالفهرنهايت (فهرنهايت = صحيح)

float fehrData = dht.readTemperature(true);

// التحقق من خروج القراءات الفاشلة مبكرًا (للمحاولة مرة أخرى).

إذا (isnan(humidityData) || isnan(celData) || isnan(fehrData))

{

Serial.println("فشلت القراءة من مستشعر DHT!");

يعود؛

}

// حساب مؤشر الحرارة بالدرجة المئوية (isFahreheit = false)

float hicData = dht.computeHeatIndex(celData, الرطوبةData, false);

// حساب مؤشر الحرارة بالفهرنهايت (الافتراضي)

float hifData = dht.computeHeatIndex(fehrData, الرطوبةData);

// اطبع إلى الشاشة التسلسلية أو المحطة الطرفية التي تختارها على 115200 Baud

Serial.print("الرطوبة:");

Serial.print(humidityData);

Serial.print("%\t");

Serial.print("درجة الحرارة في سيل:");

Serial.print(celData);

Serial.print("*C");

Serial.print("درجة الحرارة بالفهر:");

Serial.print(fehrData);

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

Serial.print("مؤشر الحرارة في Cel:");

Serial.print(hicData);

Serial.print("*C");

Serial.print("مؤشر الحرارة في الفهر:");

Serial.print(hifData);

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

عميل WiFiClient؛ // إنشاء كائن WiFi

// ابدأ أو خدمة API باستخدام عميل WiFi الخاص بنا من خلال PushingBox

إذا (client.connect(WEBSITE, 80))

{

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

+ "&humidityData =" + (سلسلة) رطوبة البيانات

+ "&celData =" + (سلسلة) celData

+ "&fehrData =" + (سلسلة) fehrData

+ "&hicData =" + (سلسلة) hicData

+ "&hifData =" + (سلسلة) hifData

) ؛

client.println("HTTP/1.1″);

Client.print("المضيف:");

client.println(WEBSITE);

client.println("وكيل المستخدم: ESP8266/1.0");

client.println("الاتصال: إغلاق");

println();

}

}

مثال على كود البرنامج النصي لتطبيق Google

إليك الكود الذي تحتاجه لإنشاء برنامج نصي قابل للقراءة لنقل بيانات المستشعر.

الحصول على استعلام الطلب:

https://script.google.com/macros/s/<your gscriptID>/exec?celData=data_here

HumidityDat، وcelData، وfehrData، وhicData، وhifData (متغيرات GScript وPushingBox وArduino بالترتيب الذي يجب كتابتها بها)

الدالة دوجيت(ه) {

Logger.log ( JSON.stringify(e) ); // هذا لعرض المعلمات

نتيجة فار = 'موافق'؛

إذا (e.parameter == غير محدد) {

النتيجة = 'لا توجد معلمات'؛

}

آخر {

معرف var= '<عنوان URL لجدول البيانات الخاص بك\;

ورقة فار = SpreadsheetApp.openById(id).getActivesheet();

var newRow = Sheet.getLastRow() + 1;

فار رو داتا = []؛

//فار واكتو = تاريخ جديد ()'

rowData[0] = new Date(); // للطابع الزمني في العمود أ

لـ (var param in e.parameter) {

logger.log('in for الحلقة, param='+param);

قيمة var = stripQuotes(e.parameter[param]);

التبديل (المعلمة) {

حالة "بيانات الرطوبة": //المعلمة

rowData[1] = value; // القيمة في العمود ب

استراحة؛

حالة "celData"؛

rowData[2] = value;

استراحة؛

حالة "fehrData":

بيانات الصف[3] = القيمة؛

استراحة؛

حالة "hicData":

rowData[4] = value;

استراحة؛

حالة "hifData":

rowData[5] = value;

استراحة؛

تقصير:

النتيجة = "معلمة غير مدعومة"؛

}

Logger.log(JSON.stringify(rowData));

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

newRange.setValues([rowData]);

}

إرجاع ContentService.createTextOutput(result);

}

دالة stripQuotes(قيمة){

قيمة الإرجاع.استبدال(/^["']|['|]$/g, "");

}

إعداد PushingBox

تعمل هذه الخدمة كوسيط بين بيانات مستشعر DHT وجداول بيانات Google. باستخدام واجهة برمجة تطبيقات PushingBox، يمكنك تحويل البيانات المنقولة عبر HTTP إلى بيانات HTTPS مشفرة يتعرف عليها Google.

لاحظ أن PushingBox يحدك من 1000 طلب يوميًا. ومع ذلك، فإنه يقطع الكثير من العمل الشاق والخبرة المطلوبة لإنشاء خوارزمية التشفير الخاصة بك والتي سوف تستجيب لها 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، فقم بتشغيل الوحدة بـ 5 فولت بدلاً من 3.3 فولت. قد لا يمنحك الجهد المنخفض قراءات صحيحة.

قم بتوصيل الدبابيس 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. كلمة السر واي فاي.
  3. معرف صندوق الدفع

كيف يمكنك التعامل مع نقل بيانات NodeMCU؟

هناك المزيد من الطرق للقيام بذلك والعديد من أنواع المستشعرات التي يمكنك استخدامها لنقل البيانات باستخدام ESP8266 مع البرامج الثابتة NodeMCU مباشرة إلى Google Sheets أو الأنظمة الأساسية السحابية الأخرى.

هل تفضل كتابة البرامج النصية والتعليمات البرمجية الخاصة بك لتخصيص مشاريعك أم أنك تبحث عبر الإنترنت عن البرامج النصية التي تم التحقق منها على github ومنصات أخرى وتتكيف من هناك؟ أخبرنا بمصادر التعليمات البرمجية والبرامج النصية المفضلة لديك بالإضافة إلى مجموعات ESP8266 وأجهزة الاستشعار، في قسم التعليقات أدناه.