محطة الطقس اردوينو
قررت أن أكتب مقالة مفصلة تخبر جميع جوانب إنشاء محطة أردوينو للطقس ، لأنه من الصعب تغطية العملية برمتها في وقت واحد. إن إصدار محطة الطقس الخاص بي مناسب لأن بياناتها مخزنة على جهاز كمبيوتر.
ما هو المطلوب- الشبكة المحلية بنيت باستخدام جهاز التوجيه واي فاي
- جهاز كمبيوتر
اردوينو UNO (اعتدت النسخة الصينية.)
- كبل USB للاتصال بـ Arduino.
BME280 5V I2C (درجة الحرارة ، الرطوبة ، مستشعر الضغط)
- محطة لحام مع مجفف شعر
- لحام 0.7 مم
- تدفق.
وحدة Wi-Fi ESP8266 نسخة ESP-01
- 4 الكابلات أمي لأبي لللوح.
- 4 كابلات من الذكور إلى الإناث للوحة
- 4 كابلات طولها 50 سم للوحة.
- 8 أنابيب رقيقة الحرارة تقلص 10 سم لكل منهما.
- 1 أنبوب كبير قابل للتقلص من الحرارة قطره بحيث يتضمن "4 كابلات بطول 50 سم للوحة" إلى جانب أنابيب أخرى قابلة للتقلص من الحرارة
إعداد الشبكة
يجب أن يرى كل كمبيوتر على الشبكة الجهاز الذي يوجد عليه الخادم ، وينصح بتثبيت مجموعات العمل نفسها على جميع أجهزة الكمبيوتر على الشبكة.

اضغط للتكبير
يجب عليك تعطيل bradmauser والجدران النارية الأخرى.
في إعدادات الشبكة ، في خصائص المحول اللاسلكي ، في علامة تبويب الوصول ، وضعت في خانة الاختيار "السماح للمستخدمين الآخرين بالوصول" ، ثم انقر فوق الإعدادات ؛
ضع جميع العلامات في الإعدادات ، سترى أسماء الخدمات بدلاً من الأرقام.

اضغط للتكبير

اضغط للتكبير
يجب عليك فتح المنفذ 80 و 3306 في جهاز التوجيه. سأعرض على سبيل المثال جهاز توجيه Tenda: أولاً ، اكتشف عنوان IP المحلي الخاص بك ، لذلك ، انقر فوق رمز الشبكة اللاسلكية. بعد ذلك ، في اللوحة المفتوحة ، بجانب اسم الشبكة ، ستظهر الخصائص . بعد ذلك ، قم بالتمرير لأسفل.

اضغط للتكبير
بعد ذلك ، افتح صفحة الويب الخاصة بالموجه ، ولديها http://192.168.0.1 ، وأدخل كلمة المرور الخاصة بالموجه ، وانقر فوق إعدادات Advanched ، ثم Virtal Server ، ثم أدخل IP المحلي أولاً ثم المنفذ 80. ثم كرر العملية ، ولكن أدخل المنفذ 3306 .

اضغط للتكبير

اضغط للتكبير
نحن بحاجة إلى المكونات التالية:
- أباتشي - سيتم إرسال البيانات من محطة الطقس هنا.
- PHP - سوف تلتقط البيانات من محطة الطقس ، وحفظ قاعدة البيانات.
- Mysql - قواعد البيانات حيث سيتم تخزين درجة الحرارة ، لأنه باستخدام PHP فقط ، من المستحيل توفير شاشة للعديد من أجهزة الكمبيوتر والأجهزة الأخرى.
- HeidiSQL هو عارض ومحرر قاعدة بيانات (يمكنك استخدام أي شيء آخر ، على سبيل المثال: "PhpMyAdmin").
لن أصف بالتفصيل إعدادات خادم Apache ، لأن هناك الكثير من المعلومات على الإنترنت ، والشيء الرئيسي هو تكوين Apache و MySQL ليكون مرئيًا على الشبكة المحلية.
بعد ذلك ، قم بإنشاء جدول في قاعدة البيانات - سيتم حفظ درجة الحرارة هناك.
مثال لصفحة المعالج (قراءات المستشعرات) على الخادم:
كود PHP$link = mysqli_connect(" ", "root", " ", " "); if (!$link) { echo ": MySQL." . PHP_EOL; echo " errno: " . mysqli_connect_errno() . PHP_EOL; echo " error: " . mysqli_connect_error() . PHP_EOL; exit; } echo " MySQL !" . PHP_EOL; echo " : " . mysqli_get_host_info($link) . PHP_EOL; if(isset($_GET['temp'])){ $c=$_GET['temp']; $vlah=$_GET['vlah']; $davlen=$_GET['davlen']; $sql = "UPDATE `temp1` SET `C`='$c',`vlah`='$vlah',`davlen`='$davlen' WHERE `id`='1'";
3. تكوين esp8266
قم بتوصيل esp-01 بالمحول وتوصيله إلى Arduino كما يلي: Rx-RX ، TX-TX ، GND-GND ، VCC-5V ؛
قم بتوصيل منفذ RESET Arduino إلى GND ؛

اضغط للتكبير
قم بتوصيل اردوينو بجهاز الكمبيوتر الخاص بك ، افتح Arduino IDE ، ثم Serial Monitor ، ثم حدد معدل 115200 ، و
كلا NL و CR .

اضغط للتكبير
- أدخل الأمر AT .
- تسليط الضوء على موافق .
- أدخل AT + RESTORE ، سيطلب من الوحدة ضبط إعدادات المصنع.
- أدخل AT + CWMODE_CUR = 1 ، سيضع هذا الوحدة في وضع العميل.
- أدخل AT + CWJAP_CUR = "Network_name" ، "كلمة المرور" - اتصال بشبكة wifi.
- قم بتمييز موافق إذا حدث اتصال.
تكوين bme280 والبناء النهائي
قم بتوصيل الاستنتاجات وفقًا للمخطط (الانتباه إلى المخطط يوضح esp8266 بدون محول ، ولكن في الواقع يجب أن يكون متصلاً بالمحول ، ومن
4 محولات الإخراج لها نفس الوظيفة كما هو موضح في الرسم البياني. )

اضغط للتكبير
افتح Arduino IDE والصق التعليمة البرمجية التالية:
اردوينو IDE كود #include <Wire.h> void setup(){ Wire.begin(); Serial.begin(9600); while (!Serial); Serial.println("\nI2C Scanner"); } void loop(){ byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 8; address < 127; address++ ){ Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0){ Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000);
افتح Serial Monitor ، وتذكر عنوان IC2 المميز.
قم بتنزيل مكتبة المستشعرات ومكتبات Touch Library وفك ضغطها في C: \ Users \ user \ Documents \ Arduino . فتح
C: \ Users \ user \ Documents \ Arduino \ libraries \ Adafruit_BME280_Library-master وتغيير العنوان:

اضغط للتكبير
افتح Arduino IDE و ضع الكود:
اردوينو IDE كود #include <SoftwareSerial.h> #define RX 10// esp8266 #define TX 11// esp8266 String AP = "Aleks"; // String PASS = "1brui47ci881"; // String HOST = "192.168.0.185";// String PORT = "80";// String field = "field1"; int countTrueCommand; int countTimeCommand; boolean found = false; int valSensor = 1; SoftwareSerial esp8266(RX,TX); #include <Wire.h> #include <SPI.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> #define BME_SCK 13 #define BME_MISO 12 #define BME_MOSI 11 #define BME_CS 10 #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BME280 bme; // I2C //Adafruit_BME280 bme(BME_CS); // hardware SPI //Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI unsigned long delayTime; void setup() { Serial.begin(9600); bool status; // default settings // (you can also pass in a Wire library object like &Wire2) status = bme.begin(); if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } esp8266.begin(115200); sendCommand("AT",5,"OK"); sendCommand("AT+CWMODE=1",5,"OK"); sendCommand("AT+CWJAP=\""+ AP +"\",\""+ PASS +"\"",20,"OK"); sendCommand("AT+CIPMUX=1",5,"OK"); } void loop() { float vlah=bme.readPressure() / 100.0F; sendCommand("AT+CIPSTART=0,\"TCP\",\""+ HOST +"\","+ PORT,15,"OK"); String cmd = "GET /?temp="+String(bme.readTemperature())+"&vlah="+String(vlah)+"&davlen="+String(bme.readHumidity())+" HTTP/1.1\r\nHost: 192.168.0.185\r\n\r\n";// GET ,temp,vlah,davlen . sendCommand("AT+CIPSEND=0," +String(cmd.length()+4),4,">"); esp8266.println(cmd);delay(1500);countTrueCommand++; sendCommand("AT+CIPCLOSE=0",5,"OK"); delay(100000); } void printValues() { Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" *C"); Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %"); Serial.println(); } void sendCommand(String command, int maxTime, char readReplay[]) { Serial.print(countTrueCommand); Serial.print(". at command => "); Serial.print(command); Serial.print(" "); while(countTimeCommand < (maxTime*1)) { esp8266.println(command);//at+cipsend if(esp8266.find(readReplay))//ok { found = true; break; } countTimeCommand++; } if(found == true) { Serial.println("OYI"); countTrueCommand++; countTimeCommand = 0; } if(found == false) { Serial.println("Fail"); countTrueCommand = 0; countTimeCommand = 0; } found = false; }
القيام به. سيتم نقل بيانات درجة الحرارة كمتغيرات إلى قاعدة البيانات.
كما ترون ، تتطلب محطة الطقس الخاصة بي معرفة أولية ببرمجة الويب ، لكن النتيجة تستحق العناء.