สารบัญ:

การใช้ 4 พินของ ESP8266-01: 3 ขั้นตอน
การใช้ 4 พินของ ESP8266-01: 3 ขั้นตอน

วีดีโอ: การใช้ 4 พินของ ESP8266-01: 3 ขั้นตอน

วีดีโอ: การใช้ 4 พินของ ESP8266-01: 3 ขั้นตอน
วีดีโอ: 📲💡 Arduino EP.1 การติดตั้ง Arduino+ESP8266 WiFi ทีละขั้นตอน 2024, พฤศจิกายน
Anonim
ใช้ 4 พินของ ESP8266-01
ใช้ 4 พินของ ESP8266-01
การใช้ 4 พินของ ESP8266-01
การใช้ 4 พินของ ESP8266-01
การใช้ 4 พินของ ESP8266-01
การใช้ 4 พินของ ESP8266-01

หมายเหตุ: โดยพื้นฐานแล้วโปรเจ็กต์นี้เป็นส่วนขยายของคำสั่งก่อนหน้าซึ่งใช้เพียง 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: วงจร

The Circuit
The Circuit

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);

แนะนำ: