جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
سأشرح في هذا البرنامج التعليمي قراءة محتوى الرطوبة في التربة باستخدام esp32 ثم إرسال القيم إلى النظام الأساسي السحابي Thingsio.ai IoT.
الخطوة 1: المكونات
مكونات الأجهزة:
1. مجلس التنمية esp32
2-مستشعر التربة
3. أسلاك العبور
برمجة:
1. Arduino IDE
2. Thingsio.ai
الخطوة 2: التوصيلات
مستشعر رطوبة التربة ---------------------- لوحة esp32
VCC --------------------------------------- 3V3
GND -------------------------------------- GND
A0 ---------------------------------------- VP
الخطوة الثالثة: الترميز:
#يشمل
#يشمل
#يشمل
عدد صحيح = 0 ، أنا ، م ، ي ، ك ؛
ر int ؛
int sensor_pin = A0 ؛
قيمة int
////////////////////////////////////////// جميع التصريحات
من أجل CLOUD ////////////////////////////////
const char * host = "api.thingsai.io" ؛ // أو المضيف =
devapi2.thethingscloud.com
const char * post_url = "/ devices / deviceData" ؛ // أو
/ api / v2 / thingscloud2 / _table / data_ac
const char * time_server =
"baas.thethingscloud.com" ؛ // هذا لتحويل الطابع الزمني
const int httpPort = 80 ؛
const int httpsPort = 443 ؛
const char * server =
"api.thingsai.io" ؛ // عنوان URL للخادم
الطابع الزمني char [10] ؛
WiFi متعدد WiFi متعدد ؛
// استخدم فئة WiFiClient لإنشاء اتصالات TCP
عميل WiFiClient ؛
///////////////////////////////////////// TIMESTAMP
وظيفة الحساب ///////////////////////////////////////////
int GiveMeTimestamp ()
{
طويل بدون توقيع
المهلة = مللي () ؛
// عميل WiFiClient ؛
في حين
(client.available () == 0)
{
إذا (بالمللي () -
المهلة> 50000)
{
client.stop () ؛
العودة 0 ؛
}
}
بينما (client.available ())
{
خط السلسلة =
client.readStringUntil ('r') ، // indexOf () هي وظيفة للبحث عن smthng ، وتعيد -1 إذا لم يتم العثور عليها
نقاط البيع int =
line.indexOf ("\" الطابع الزمني / "")؛ // ابحث عن "\" timestamp / "" من بداية الرد ونسخ جميع البيانات بعد ذلك ، سيكون طابعك الزمني
إذا (نقاط البيع> =
0)
{
int j = 0 ؛لـ (j = 0 ؛ j <10 ؛ j ++)
{الطابع الزمني [j] = الخط [نقطة البيع + 12 + ي] ؛
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
الإعداد باطل()
{Serial.begin (115200) ؛Serial.println ("القراءة من جهاز الاستشعار …") ؛
تأخير (2000) ؛
// نبدأ بـ
الاتصال بشبكة WiFi
WiFiMulti.addAP ("Wifi_name" ،
"كلمة السر واي فاي")؛
Serial.println () ،
Serial.println () ،Serial.print ("انتظر WiFi …") ؛بينما (WiFiMulti.run ()! = WL_CONNECTED) {Serial.print (".") ؛
تأخير (500) ؛
}Serial.println ("") ؛Serial.println ("متصل بشبكة WiFi") ؛
Serial.println ( IP
عنوان: )؛Serial.println (WiFi.localIP ()) ؛
تأخير (500) ؛
}
حلقة فارغة()
{
{
///////////////////////////////////////// أرسل الاستعلام و
احصل على الاستجابة /////////////////////////
القيمة =
analogRead (sensor_pin) ؛
// القيمة =
الخريطة (القيمة 550 ، 0 ، 0 ، 100) ؛Serial.print ("Mositure:") ؛Serial.print (القيمة) ؛Serial.println ("٪") ؛تأخير (1000) ؛Serial.print ("الاتصال بـ") ؛Serial.println (مضيف) ؛ // المعرف الصاعد: - host = devapi2.thethingscloud.com أو 139.59.26.117
/////////////////////////////////////// TIMESTAMP CODE SNIPPET
/////////////////////////
Serial.println ("الحصول على الطابع الزمني للداخل / n") ؛
لو
(! client.connect (خادم الوقت ،
{
إرجاع؛
//*-*-*-*-*-*-*-*-*-*
}client.println ("GET / api / timestamp HTTP / 1.1") ؛ // ما الذي يفعله هذا الجزء ، لم أحصل عليهclient.println ("المضيف: baas.thethingscloud.com") ؛client.println ("Cache-Control: no-cache") ؛client.println ("Postman-Token: ea3c18c6-09ba-d049-ccf3-369a22a284b8") ؛
client.println () ،
GiveMeTimestamp () ،
// سوف تستدعي الوظيفة التي ستحصل على استجابة الطابع الزمني من الخادم
Serial.println ("تم استلام الطابع الزمني") ؛
Serial.println (طابع زمني) ؛Serial.println ("داخل ThingsCloudPost") ؛
سلسلة PostValue =
"{" device_id / ": 61121695918، \" slave_id / ": 2" ؛
PostValue =
PostValue + "، \" dts / ":" + الطابع الزمني؛
PostValue =
PostValue + "، \" data / ": {" MOIST / ":" + value + "}" + "}"؛Serial.println (PostValue) ؛
/ * إنشاء مثيل WiFiClientSecure * /
عميل WiFiClientSecure ؛Serial.println ("الاتصال بالخادم عبر المنفذ 443") ؛
لو
(! client.connect (الخادم ، 443)) {Serial.println ("فشل الاتصال!") ؛
} آخر {Serial.println ("متصل بالخادم!") ؛
/ * إنشاء
طلب */client.println ("POST / devices / deviceData HTTP / 1.1") ؛client.println ("المضيف: api.thingsai.io") ؛//client.println("Connection: close ") ؛client.println ("نوع المحتوى: application / json") ؛
client.println ( التحكم في ذاكرة التخزين المؤقت:
no-cache ") ؛client.println ("التفويض: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9. IjVhMzBkZDFkN2QwYjNhNGQzODkwYzQ4OSI.kaY6OMj5cYlWNqm9PNTk6client.print ("طول المحتوى:") ؛
client.println (PostValue.length ()) ،client.println () ،client.println (PostValue) ؛
////////////////////////////////// نشر البيانات على
تم الانتهاء من السحابة والحصول الآن على نموذج الاستجابة للخادم السحابي ////////////////////
Serial.print ( في انتظار الرد
);
في حين
(! client.available ()) {
تأخير (50) ؛
//Serial.print (".") ؛
}
/ * إذا كانت البيانات
متاح ثم الاستلام والطباعة إلى Terminal * /
في حين
(client.available ()) {
char c = client.read () ؛Serial.write (ج) ؛
}
/ * إذا كان ملف
الخادم غير متصل ، أوقف العميل * /
لو
(! client.connected ()) {Serial.println () ،Serial.println ("الخادم غير متصل") ؛
client.stop () ؛
}
}
Serial.println ( //////////////////////// THE END
///////////////////// );
تأخير (3000) ؛
}
}
الخطوة 4: الإخراج:
يتم عرض إخراج الكود.
الخطوة 5: الرسم البياني
هذا هو التمثيل الرسومي للقيم التي يتم قراءتها من المستشعر.
الخطوة السادسة:
هنا هو الفيديو الكامل للمشروع. اشكرك.