תוכן עניינים:

שימוש ב -4 הפינים של ESP8266-01: 3 שלבים
שימוש ב -4 הפינים של ESP8266-01: 3 שלבים

וִידֵאוֹ: שימוש ב -4 הפינים של ESP8266-01: 3 שלבים

וִידֵאוֹ: שימוש ב -4 הפינים של ESP8266-01: 3 שלבים
וִידֵאוֹ: הנדסת אלקטרוניקה חשמל ומחשבים 2024|ארדואינו|איך עובדים מסכי הטאצ' ? איך מנצלים הקיבול להפעלת צרכנים 2024, יולי
Anonim
שימוש ב -4 הפינים של ESP8266-01
שימוש ב -4 הפינים של ESP8266-01
שימוש ב -4 הפינים של ESP8266-01
שימוש ב -4 הפינים של ESP8266-01
שימוש ב -4 הפינים של ה- ESP8266-01
שימוש ב -4 הפינים של ה- ESP8266-01

הערה: פרויקט זה הוא בעצם הרחבה של מדריך קודם שהשתמש רק ב -2 סיכות. המספר המוגבל (4) של סיכות GPIO ב- ESP8266-01 עשוי להיראות כמכשול עבור כל יישום רציני. אך אם משתמשים בסיכות ב בדרך חכמה אפשר מאוד לעשות הרבה רק עם אותם 4 סיכות. בחלק מההוראות האחרונות שלי, הראיתי את השימוש ב- DHT11 DS18B20, OLED, RTC ו- BMP180 עם ESP8266-01. בהנחיה זו יצאתי להשתמש ב -4 חיישנים ותצוגה, תוך העלאת הנתונים שנרכשו ל- Thingspeak. זה למעשה מתרחב על פרויקט של ניטור האווירה בלול התרנגולות שלי וסביבו. כן, אתה יכול לקרוא לזה תחנת מזג אוויר, אבל זה רק כדי להמחיש את השימוש בארבעת הסיכות, אתה יכול בקלות לעשות משהו אחר בדרך זו אשתמש בשני סיכות עבור I2C (BMP180 ו- OLED) פין אחד עבור 2 חיישני DS18B20 באמצעות למרות ש- ESP8266-01 מכיל כעת את כל הסיכות שלו, אני עדיין יכול להוסיף עוד חיישנים (או מפעילים) באמצעות פרוטוקול OneWire ו/או באמצעות פרוטוקול I2C. אז מה אנחנו צריכים: BOM

  • ESP8266-01
  • 2x DS18B20
  • 1x DHT11
  • 1x BMP180
  • OLED (אופציונלי)

וכמובן לוח לחם, PSU של 3.3 וולט וכמה חוטי לוח ולוח של Thingspeak

רק כמה הערות בנוגע ל- BOM:

  • ברור שהפרויקט עוסק בניצול הפינים המוגבלים של ESP8266-01, אך אם אתה עדיין צריך לקנות אחד, תוכל לשקול ESP8266-12 שיש בו יותר סיכות
  • חיישן לחות וטמפרטורה זול לכל מטרה DHT11A. זה לא מדויק במיוחד אבל זה יקרה. אם אתה עדיין צריך לקנות אחד, תוכל לבחור ב- DHT22 שהוא כביכול מדויק יותר, אך תוכל גם לבחור ב- AMS2321. זהו מעין DHT22 שמתאים ל- I2C, ובכך משחרר סיכה נוספת
  • BMP180 מודד טמפרטורה ולחץ אוויר. הוא ממשיכו של ה- BMP085, אך כעת יש לו גם כמה מחליפים בעצמו. יש BMP280 (זול יותר), אבל אתה יכול גם לבחור ב- BME280 המודד טמפרטורה, לחץ אוויר ולחות. כך תוכל לחסוך בחיישן DHT/AMS
  • OLEDI פשוט השתמש בזה כדי שאוכל לראות במהירות אם החיישנים נקראו, אבל אתה יכול לבדוק את זה ב- Thingspeak. ה- OLED קטן ממילא כדי להדפיס את כל ערכי הקריאה

שלב 1: המעגל

המעגל
המעגל

ארבעת הסיכות של ה- ESP8266 אינן מסומנות ככאלה במחשב הלוח, ורוב התמונות מציינות בבירור את GPIO0 ו- GPIO2. עם זאת יש ל- ESP826-01 סיכת GPIO1 (סיכת ה- Tx) ופין GPIO3 (סיכת ה- Rx). ישתמש בסיכות אלה כדלקמן

  • GPIO0 -> סיכת SDA של יציאת I2C
  • GPIO1 -> DHT11
  • סיכת GPIO2-> SCL של יציאת I2C
  • אוטובוס GPIO3-> OneWire

מכיוון שכבר יש למודולי I2C שלי נגדי משיכה למעלה, לא אוסיף שם נגדים מסוג I2C. ה- DS18B20 עדיין זקוק לנגד משיכה שעבורו השתמשתי ב- 4k7, אבל זה ממש לא קריטי, 10k זה גם טוב. DHT11 כביכול גם צריך נגד משיכה אבל מצאתי שהוא עובד גם בלי אחד. הוספת נגד 4k7 לא שינתה אף אחת מהקריאות, אז השארתי אותה בחוץ. לרבים ממודולי ה- DHT11 עם 3 פינים יש כבר 10 k מולחמים על המודול. פשוט הבנתי שלא ציירתי את החיבורים ל- OLED. זה בגלל שחיברתי אותו רק לבדיקה מהירה, אבל אם תרצה להוסיף אותו, זה רק עניין של חיבור SDA ל- SDA ו- SCL ל- SCL … וכמובן הקרקע וסיכות ה- Vcc לעמיתיהם

שלב 2: התוכנית

התוכנית די פשוטה. ראשית הוא מגדיר את הספריות והחיישנים. הוא מחבר את ה- DHT11 לסיכה 1 (Tx) ואת האוטובוס OnWire עבור ה- DS18B20 לסיכה 3 (Rx). על מנת להשתמש ביותר מחיישן DS18B20 אחד באוטובוס OneWire, עליך לדעת את 'הכתובת הייחודית' שלהם. אם אין לך את זה אז אתה צריך תוכנית כדי לקרוא את הכתובות האלה. עשה זאת בארדואינו בקלות. בתוכנית אתה עדיין צריך לספק את אישורי ה- WiFi שלך וכן את ה- API לכתיבת ערוץ Thingspeak שלך.

/*

שדה טמפרטורה זמני של שדה 1 (DHT11) שדה 2 לחות (DHT11) שדה 3 טמפרטורת לול (DS18B20) שדה 4 טמפרטורת קרקע (DS18B20) שדה 5 לחץ אוויר (bmp180) שדה 6 טמפרטורת חוץ (bmp180) * */ #כולל #כלול // https://www.pjrc.com/teensy/td_libs_OneWire.html #include // https://milesburton.com/Main_Page?title=Dallas_Tem… #include #include #include "SSD1306.h" SSD1306 display (0x3c, 0, 2); #define DHTPIN 1 // GPIO1 (Tx) #define DHTTYPE DHT11 #define ONE_WIRE_BUS 3 // GPIO3 = Rx const char* ssid = "YourSSID"; const char* password = "YourPassword"; const char* host = "api.thingspeak.com"; const char* writeAPIKey = "W367812985"; // השתמש ב- writeApi שלך // DHT11 דברים לצוף temperature_buiten; float temperature_buiten2; DHT dht (DHTPIN, DHTTYPE, 15); // דברים DS18b20 OneWire oneWire (ONE_WIRE_BUS); // מופע oneWire לתקשר עם כל מכשירי OneWire DallasTemperature חיישנים (& oneWire); // העברת כתובת של מופע oneWire שלנו לטמפרטורה של דאלאס. DeviceAddress Probe01 = {0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02 = {0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 דברים Adafruit_BMP085 bmp; הגדרת void () {// I2C דברים Wire.pins (0, 2); Wire.begin (0, 2); // אתחל חיישנים // dht 11 דברים dht.begin (); // ds18b20 stuff sensors.begin (); // ds18b20 // הגדר את הרזולוציה ל 10 ביט (יכול להיות 9 עד 12 סיביות.. נמוך יותר מהיר יותר) sensors.setResolution (Probe01, 10); sensors.setResolution (Probe02, 10); // bmp180 דברים אם (! bmp.begin ()) {// Serial.println ("אין BMP180 /BMP085"); // while (1) {}} // OLED stuff display.init (); display.flipScreenVertically (); display.setFont (ArialMT_Plain_10); עיכוב (1000); // התחבר לרשת WiFi WiFi.begin (ssid, סיסמא); בעוד (WiFi.status ()! = WL_CONNECTED) {עיכוב (500); }} לולאת חלל () {// ds18b20stuff ------------------- sensors.requestTemperatures (); // שלח את הפקודה כדי לקבל טמפרטורות temperature_buiten = sensors.getTempC (Probe01); // temperature_buiten2 = sensors.getTempC (Probe02); // // dht11 דברים ---------------- ---- צף לחות = dht.readHumidity (); טמפרטורת מצוף = dht.readTemperature (); אם (isnan (לחות) || isnan (טמפרטורה)) {החזרה; } // bmp stuff ------------------------- מחרוזת t = String (bmp.readTemperature ()); מחרוזת p = מחרוזת (bmp.readPressure ()); // חומר OLED -------------------------- display.clear (); display.drawString (0, 10, p); // bmp לחץ display.drawString (0, 24, String (temperature_buiten)); // ds18b20 display.drawString (0, 38, String (לחות)); // dht11 תצוגה.לְהַצִיג(); // ליצור חיבורי TCP לקוח WiFiClient; const int httpPort = 80; if (! client.connect (host, httpPort)) {return; } כתובת אתר מחרוזת = "/עדכון? Key ="; url += writeAPIKey; url += "& field1 ="; url += מחרוזת (טמפרטורה); // roost (DHT1) url += "& field2 ="; url += String (לחות); // roost (DHT11) url += "& field3 ="; url += String (temperature_buiten); // טמפרטורת לול (DS18B20 nr 1) url += "& field4 ="; url += מחרוזת (temperature_buiten2); // טמפרטורת הקרקע (DS18B29 מס 2) url += "& field5 ="; url += String (bmp.readTemperature ()); טמפרטורת חוץ (BMP180) url += "& field6 ="; url += String (bmp.readPressure ()); // Airpressure (BMP180) url += "\ r / n"; // שלח בקשה לשרת client.print (מחרוזת ("GET") + url + "HTTP/1.1 / r / n" + "Host:" + host + "\ r / n" + "חיבור: close / r / n / r / n "); עיכוב (1000); }

……..

שלב 3: עוד

כרגע תוכנית זו מנטרת רק, אך מה מונע ממך להוסיף חיישן אור BH1750 I2C כדי למדוד אם מדובר בערב או בבוקר או RTC כדי לדעת את השעה ביום ולפתוח ולסגור את דלת הלול באופן אוטומטי בעזרת כרטיס הרחבה I/O PCF8574 I2C, או כפי שהוא כבר בגינה, הוסף ממיר PCF8591 או ADS1115 AD למדידת לחות הקרקע והפעל משאבה בעת הצורך. או אולי הפעלת מחמם אגן המים כשהטמפרטורה יורדת מתחת לאפס אם יש שבב I2 C עבורו, כנראה שה- ESP8266 יכול להשתמש בו.

הערה חשובה: התוכנית כפי שהיא פועלת היטב, אך אם תוסיף חיישנים אחרים ל- Rx או Tx, במיוחד אם אתה הופך אותם ליציאות, הסיכות עלולות פתאום לזכור שהן לא ממש סיכות GPIO. עדיף לספר מהסיכות מההתחלה שהם עכשיו סיכות GPIO. אחד עושה זאת על ידי הכנסת ההצהרות הבאות להתקנה:

pinMode (1, FUNCTION_3);

pinMode (3, FUNCTION_3);

מוּמלָץ: