สารบัญ:
วีดีโอ: การใช้ 4 พินของ ESP8266-01: 3 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
หมายเหตุ: โดยพื้นฐานแล้วโปรเจ็กต์นี้เป็นส่วนขยายของคำสั่งก่อนหน้าซึ่งใช้เพียง 2 พินเท่านั้น หมุด GPIO จำนวนจำกัด (4) บน ESP8266-01 อาจดูเหมือนเป็นอุปสรรคสำหรับแอปพลิเคชันร้ายแรงใดๆ แต่ถ้าใครใช้หมุดใน เป็นวิธีที่ชาญฉลาดที่สามารถทำได้มากด้วยหมุด 4 ตัวเท่านั้น ในคำแนะนำล่าสุดบางส่วนของฉัน ฉันได้แสดงการใช้ DHT11, DS18B20, OLED, RTC และ BMP180 กับ ESP8266-01 ในคำแนะนำนี้ฉันกำหนดให้ใช้เซ็นเซอร์ 4 ตัวและจอแสดงผลในขณะที่อัปโหลดข้อมูลที่ได้รับไปยัง Thingspeak อันที่จริงมันกำลังขยายโครงการตรวจสอบบรรยากาศในและรอบ ๆ เล้าไก่ของฉัน ใช่ คุณสามารถเรียกสิ่งนี้ว่าสถานีตรวจอากาศได้ แต่เป็นเพียงการแสดงตัวอย่างการใช้หมุด 4 ตัว คุณสามารถสร้างอย่างอื่นได้อย่างง่ายดาย ฉันจะใช้ 2 พินสำหรับ I2C (BMP180 และ OLED) 1 พินสำหรับเซ็นเซอร์ DS18B20 2 ตัวผ่านทาง โปรโตคอล OneWire1 พินสำหรับ DHT11แม้ว่าตอนนี้ ESP8266-01 จะใช้พินทั้งหมดแล้ว แต่ฉันยังคงสามารถเพิ่มเซ็นเซอร์ (หรือแอคทูเอเตอร์) เพิ่มเติมผ่านโปรโตคอล OneWire และ/หรือผ่านโปรโตคอล I2C ได้ ดังนั้นสิ่งที่เราต้องการ:BOM
- ESP8266-01
- 2x DS18B20
- 1x DHT11
- 1x BMP180
- OLED (อุปกรณ์เสริม)
และแน่นอนว่ามีเขียงหั่นขนม, PSU 3.3 V และสายเขียงหั่นขนมบางอันและบัญชี Thingspeak
ข้อสังเกตบางประการเกี่ยวกับ BOM:
- ESP8266-01เห็นได้ชัดว่าโครงการนี้เกี่ยวกับการใช้หมุดที่จำกัดของ ESP8266-01 แต่ถ้าคุณยังต้องซื้ออีกสักตัว คุณอาจพิจารณา ESP8266-12 ที่มีหมุดมากกว่า
- DHT11A เซ็นเซอร์ความชื้นและอุณหภูมิอเนกประสงค์ราคาถูก มันไม่ถูกต้องอย่างมหาศาล แต่มันจะทำ หากคุณยังต้องการซื้อ คุณสามารถเลือก DHT22 ที่มีความแม่นยำมากกว่า แต่คุณสามารถเลือก AMS2321 ได้เช่นกัน นั่นคือประเภท DHT22 ที่เหมาะสำหรับ I2C จึงปล่อยพินอีกอันหนึ่ง
- BMP180วัดอุณหภูมิและความดันอากาศ เป็นผู้สืบทอดของ BMP085 แต่ตอนนี้ก็มีผู้ช่วยเหลืออยู่บ้างแล้ว มี BMP280 (ถูกกว่า) แต่คุณสามารถเลือก BME280 ที่วัดอุณหภูมิ ความกดอากาศ และความชื้นได้ ด้วยวิธีนี้ คุณจะประหยัดเซ็นเซอร์ DHT/AMS ได้
- OLEDฉันใช้สิ่งนั้น ดังนั้นฉันจึงสามารถเห็นได้อย่างรวดเร็วว่าเซ็นเซอร์ถูกอ่านหรือไม่ แต่คุณสามารถตรวจสอบบน Thingspeak ได้เช่นกัน OLED นั้นเล็กเกินกว่าจะพิมพ์ค่าที่อ่านได้ทั้งหมด
ขั้นตอนที่ 1: วงจร
4 พินของ ESP8266 ไม่ได้ระบุไว้บน PCB และภาพส่วนใหญ่ระบุอย่างชัดเจนเฉพาะ GPIO0 และ GPIO2 อย่างไรก็ตาม ESP826-01 มีพิน aa 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 มากกว่า 1 ตัวบนบัส OneWire คุณจำเป็นต้องทราบ 'ที่อยู่ที่ไม่ซ้ำกัน' หากคุณไม่มีสิ่งนั้น คุณต้องมีโปรแกรมเพื่ออ่านที่อยู่เหล่านั้น ทำสิ่งนี้บน Arduino เพื่อความสะดวก ในโปรแกรมคุณยังต้องให้ข้อมูลรับรอง WiFi ของคุณรวมถึง API การเขียนสำหรับ Thingspeak Channel ของคุณ
/*
สนาม 1 พักอุณหภูมิ (DHT11) สนาม 2 พักความชื้น (DHT11) สนาม 3 อุณหภูมิสุ่ม (DS18B20) สนาม 4 อุณหภูมิดิน (DS18B20) สนาม 5 ความดันอากาศ (bmp180) สนาม 6 อุณหภูมิภายนอก (bmp180) * */ #include #include // 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 = "รหัสผ่านของคุณ"; const char* host = "api.thingspeak.com"; อักขระ const* writeAPIKey = "W367812985"; // ใช้ writeApi ของคุณ // DHT11 ของ float temperature_buiten; อุณหภูมิลอยตัว_buiten2; DHT dht(DHTPIN, DHTTYPE, 15); //DS18b20 สิ่ง OneWire oneWire(ONE_WIRE_BUS); //อินสแตนซ์ oneWire เพื่อสื่อสารกับอุปกรณ์ OneWire เซ็นเซอร์อุณหภูมิ DallasTemperature (&oneWire); // ส่งที่อยู่ของอินสแตนซ์ oneWire ของเราไปยัง Dallas Temperature DeviceAddress Probe01 = { 0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02={0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 สิ่ง Adafruit_BMP085 bmp; การตั้งค่าเป็นโมฆะ () {// 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 สิ่ง if (!bmp.begin()) { // Serial.println ("No BMP180 / BMP085"); // ในขณะที่ (1) {} } // สิ่งของ OLED display.init(); display.flipScreenVertically(); display.setFont(ArialMT_Plain_10); ล่าช้า (1000); // เชื่อมต่อกับเครือข่าย WiFi WiFi.begin (ssid, รหัสผ่าน); ในขณะที่ (WiFi.status () != WL_CONNECTED) { ล่าช้า (500); } } โมฆะลูป () { //ds18b20stuff -------------------- sensors.requestTemperatures (); // ส่งคำสั่งรับ temperature temperature_buiten = sensors.getTempC(Probe01);// temperature_buiten2 = sensors.getTempC(Probe02);// //dht11 stuff---------------- ---- ความชื้นลอย = dht.readHumidity(); อุณหภูมิลอย = dht.readTemperature(); if (isnan (ความชื้น) || isnan (อุณหภูมิ)) { กลับ; } //bmp ------------------------- สตริง t= สตริง (bmp.readTemperature()); สตริง p=สตริง(bmp.readPressure()); //สิ่งของ OLED -------------------- display.clear(); display.drawString(0, 10, p);//bmp pressure display.drawString(0, 24, String(temperature_buiten));//ds18b20 display.drawString(0, 38, String(humidity));//dht11 display.แสดง(); // สร้างการเชื่อมต่อ TCP ไคลเอนต์ WiFiClient; const int httpPort = 80; if (!client.connect(host, httpPort)) { return; } url สตริง = "/update?key="; url += writeAPIKey; url += "&field1="; url += สตริง (อุณหภูมิ); // roost (DHT1) url += "&field2="; url += สตริง (ความชื้น); // roost (DHT11) url += "&field3="; url += String(temperature_buiten);//coop temperature (DS18B20 nr 1) url += "&field4="; url += สตริง (temperature_buiten2); // อุณหภูมิดิน (DS18B29 nr 2) url +="&field5="; url +=String(bmp.readTemperature());อุณหภูมิภายนอก (BMP180) url +="&field6="; url +=String(bmp.readPressure()); // ความดันอากาศ (BMP180) url += "\r\n"; // ส่งคำขอไปยังเซิร์ฟเวอร์ client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r \n\r\n"); ล่าช้า (1000); }
……..
ขั้นตอนที่ 3: เพิ่มเติม
ขณะนี้โปรแกรมนี้เพียงตรวจสอบ แต่สิ่งที่จะหยุดคุณไม่ให้เพิ่มเซ็นเซอร์วัดแสง BH1750 I2C เพื่อวัดว่าเป็นตอนเย็นหรือตอนเช้าหรือ RTC เพื่อทราบเวลาของวันและเพื่อเปิดและปิดประตูสุ่มอัตโนมัติด้วยความช่วยเหลือของ การ์ดเอ็กซ์แพนชัน PCF8574 I2C I/O หรือมีอยู่แล้วในสวน ให้เพิ่มตัวแปลง PCF8591 หรือ ADS1115 AD เพื่อวัดความชื้นในดินและเปิดใช้งานปั๊มเมื่อจำเป็น หรืออาจเปิดเครื่องทำน้ำอุ่นในอ่างเมื่ออุณหภูมิลดลงต่ำกว่าศูนย์ถ้ามีชิป I2 C สำหรับมัน ESP8266 ก็สามารถใช้งานได้
ข้อควรทราบที่สำคัญ: โปรแกรมทำงานได้ดี แต่ถ้าคุณเพิ่มเซ็นเซอร์อื่นๆ ลงใน Rx หรือ Tx โดยเฉพาะอย่างยิ่งหากคุณสร้างให้เป็นเอาต์พุต หมุดอาจจำได้ว่าไม่ใช่หมุด GPIO จริงๆ เป็นการดีกว่าที่จะบอกพินตั้งแต่เริ่มต้นว่าตอนนี้พิน GPIO เป็นพินแล้ว อันดับแรกทำได้โดยใส่ข้อความสั่งต่อไปนี้ในการตั้งค่า:
โหมดพิน (1, FUNCTION_3);
โหมดพิน(3, FUNCTION_3);
แนะนำ:
การใช้ Pimoroni Enviro+ FeatherWing กับ Adafruit Feather NRF52840 Express: 8 ขั้นตอน
การใช้ Pimoroni Enviro+ FeatherWing กับ Adafruit Feather NRF52840 Express: Pimoroni Enviro+ FeatherWing เป็นบอร์ดที่อัดแน่นไปด้วยเซ็นเซอร์ที่ออกแบบมาเพื่อทำงานร่วมกับบอร์ดรุ่น Adafruit Feather เป็นจุดเริ่มต้นที่มีประโยชน์สำหรับทุกคนที่สนใจในการตรวจสอบด้านสิ่งแวดล้อม มลภาวะในชั้นบรรยากาศ และการทำลายข้อมูล ผม
การใช้ Guitar Hero Guitar เพื่อควบคุมการซูม (Windows เท่านั้น): 9 ขั้นตอน
การใช้กีตาร์ฮีโร่กีตาร์เพื่อควบคุมการซูม (เฉพาะ Windows): เนื่องจากเราอยู่ท่ามกลางการระบาดใหญ่ทั่วโลก พวกเราหลายคนติดอยู่กับการทำความสะอาดบ้านและเข้าร่วมการประชุมบน Zoom หลังจากนี้ไปสักพัก มันอาจจะดูจืดชืดและน่าเบื่อหน่าย ขณะทำความสะอาดบ้าน ฉันพบกีตาร์ Guitar Hero ตัวเก่าที่ถูกโยนทิ้งใ
การใช้ WiFi AutoConnect กับบอร์ด ESP8266/ESP32: 3 ขั้นตอน
การใช้ WiFi AutoConnect กับบอร์ด ESP8266/ESP32: เราจะเรียนรู้วิธีใช้ไลบรารี AutoConnect ที่ช่วยให้เราเชื่อมต่อและจัดการจุดเชื่อมต่อ WiFi โดยใช้สมาร์ทโฟน วิดีโอด้านบนจะแนะนำคุณตลอดกระบวนการพร้อมกับหน้าจอต่างๆ ที่คุณต้องการ เพื่อเข้าถึงเรียนรู้เกี่ยวกับเ
การใช้ ESP8266 กับ Arduino และ Blynk: 4 ขั้นตอน
การใช้ ESP8266 กับ Arduino และ Blynk: เชื่อมต่อ Arduino Mega ของคุณกับแอป blynk โดยใช้ espp8266 shield
ESP8266 การใช้ PWM พร้อมโพเทนชิออมิเตอร์: 4 ขั้นตอน
ESP8266 การใช้ PWM พร้อมโพเทนชิออมิเตอร์: สำหรับผู้ที่ไม่คุ้นเคยกับอุปกรณ์อิเล็กทรอนิกส์ PWM หมายถึงการควบคุมพลังงาน และในชุดประกอบนี้ เราจะแสดงวิธีใช้งานเพื่อควบคุมความเข้มของแสงของ LED ที่คล้ายกับการหรี่ไฟบนหลอดไฟ โดยมีตัวเลือกในการมืดและสว่างขึ้น กลไกนี้ยังทั้งหมด