فهرست مطالب:

با استفاده از 4 پین ESP8266-01: 3 مرحله
با استفاده از 4 پین ESP8266-01: 3 مرحله

تصویری: با استفاده از 4 پین ESP8266-01: 3 مرحله

تصویری: با استفاده از 4 پین ESP8266-01: 3 مرحله
تصویری: نحوه ساخت رله Wi-Fi 4 کانال ESP8266 ESP01 | ESP01 اتوماسیون خانگی | RemoteXY | FLProg 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 a DS18B20 ، OLED ، RTC و BMP180 با ESP8266-01 را نشان داده ام. در این دستورالعمل تصمیم گرفتم از 4 سنسور و یک صفحه نمایش استفاده کنم ، در حالی که داده های به دست آمده را در Thingspeak بارگذاری می کنم. این در واقع در حال گسترش پروژه نظارت بر جو و اطراف مرغداری من است. بله ، شما می توانید این را آب و هوا نامید ، اما این فقط برای نشان دادن استفاده از 4 پین است ، به راحتی می توانید چیز دیگری را به این روش بسازید. من از 2 پین برای I2C (BMP180 و OLED) 1 پین برای 2 سنسور DS18B20 از طریق اگرچه ESP8266-01 در حال حاضر از همه پین های آن استفاده شده است ، اما هنوز می توانم حسگرهای بیشتری (یا محرک ها) را از طریق پروتکل OneWire و/یا از طریق پروتکل I2C اضافه کنم. بنابراین ، به چه چیزی نیاز داریم:

  • ESP8266-01
  • 2x DS18B20
  • 1x DHT11
  • 1x BMP180
  • OLED (اختیاری)

و البته یک تخته نان ، یک منبع تغذیه 3.3 ولت و برخی از سیم های نان و یک حساب Thingspeak

فقط چند نکته در مورد BOM:

  • بدیهی است که پروژه در مورد استفاده از پین های محدود ESP8266-01 است ، اما اگر هنوز نیاز به خرید آن دارید ، می توانید ESP8266-12 را که دارای پین های بیشتری است ، در نظر بگیرید.
  • سنسور رطوبت و دما DHT11A ارزان قیمت. این خیلی دقیق نیست اما این کار را خواهد کرد. اگر هنوز نیاز به خرید دارید ، می توانید DHT22 را انتخاب کنید که ظاهراً دقیق تر است ، اما می توانید AMS2321 را نیز انتخاب کنید. این نوعی DHT22 است که برای I2C مناسب است ، بنابراین یک پین دیگر آزاد می شود
  • BMP180 دما و فشار هوا را اندازه گیری می کند. این جانشین BMP085 است ، اما در حال حاضر نیز دارای تعدادی محافظ است. BMP280 (ارزان تر) وجود دارد ، اما شما همچنین می توانید BME280 را انتخاب کنید که دما ، تهویه هوا و رطوبت را اندازه گیری می کند. به این ترتیب می توانید در سنسور DHT/AMS صرفه جویی کنید
  • OLEDI فقط از آن استفاده کرد ، بنابراین من به سرعت می توانم ببینم سنسورها خوانده شده اند یا نه ، اما شما همچنین می توانید آن را در 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 هیچ یک از قرائت ها را تغییر نداد ، بنابراین آن را کنار گذاشتم. بسیاری از ماژول های 3 پین DHT11 ، در حال حاضر 10 کیلوگرم روی ماژول لحیم شده اند. من تازه متوجه شدم که اتصالات OLED را ترسیم نکرده ام. این به این دلیل است که من فقط آن را برای یک بررسی سریع متصل کردم ، اما اگر بخواهید آن را اضافه کنید ، فقط موضوع اتصال SDA به SDA و SCL به SCL است … و البته پایه های Vcc و پایه به همتایان خود

مرحله 2: برنامه

برنامه کاملاً ساده است. ابتدا کتابخانه ها و حسگرها را تنظیم می کند. DHT11 را به پین 1 (Tx) و گذرگاه OnWire را برای DS18B20 به پین 3 (Rx) متصل می کند. برای استفاده از بیش از 1 سنسور DS18B20 در گذرگاه OneWire ، باید "آدرس منحصر به فرد" آنها را بشناسید. اگر آن را ندارید ، به برنامه ای برای خواندن این آدرس ها نیاز دارید. این کار را با arduino برای سهولت انجام دهید. در برنامه شما هنوز باید اعتبار WiFi خود و همچنین API نوشتن را برای Thingspeak Channel خود ارائه دهید

/*

میدان 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… #شامل #شامل #شامل #SSD1306.h نمایشگر SSD1306 0 (0x3c ، ، 2) ؛ #تعریف DHTPIN 1 // GPIO1 (Tx) #تعریف DHTTYPE DHT11 #تعریف ONE_WIRE_BUS 3 // GPIO3 = Rx const char* ssid = "YourSSID" ؛ const char* رمز عبور = "YourPassword"؛ const char* host = "api.thingspeak.com"؛ const char* writeAPIKey = "W367812985"؛ // از writeApi خود استفاده کنید // DHT11 stuff float 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 setup () {// I2C stuff Wire.pins (0، 2)؛ Wire.begin (0 ، 2) ؛ // مقداردهی اولیه سنسورها // dht 11 stuff dht.begin ()؛ // ds18b20 stuff sensors.begin ()؛ // ds18b20 // وضوح را روی 10 بیت تنظیم کنید (می تواند 9 تا 12 بیت باشد. پایین تر سریعتر است) sensors.setResolution (Probe01، 10)؛ sensors.setResolution (Probe02، 10) ؛ // موارد bmp180 if (! bmp.begin ()) {// Serial.println ("بدون BMP180 /BMP085") ؛ // while (1) {}} // OLED stuff display.init ()؛ display.flipScreenVertically ()؛ display.setFont (ArialMT_Plain_10) ؛ تاخیر (1000) ؛ // اتصال به شبکه WiFi WiFi.begin (ssid ، رمز عبور) ؛ while (WiFi.status ()! = WL_CONNECTED) {تأخیر (500)؛ }} void loop () {// ds18b20stuff ------------------- sensors.requestTemperatures ()؛ // ارسال دستور برای دریافت درجه حرارت temperature_buiten = sensors.getTempC (Probe01) ؛ // temperature_buiten2 = sensors.getTempC (Probe02) ؛ // // dht11 stuff ---------------- ---- رطوبت شناور = dht.readHumidity ()؛ دمای شناور = dht.readTemperature ()؛ if (isnan (رطوبت) || isnan (دما)) {return؛ } // چیزهای 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 (رطوبت)) ؛ // نمایش dht11.نمایش دادن()؛ // ایجاد اتصالات TCP مشتری WiFiClient ؛ const int httpPort = 80؛ if (! client.connect (میزبان ، httpPort)) {return؛ } url رشته = "/update؟ key ="؛ url += writeAPIKey؛ url += "& field1 ="؛ url += رشته (دما) ؛ // roost (DHT1) url += "& field2 ="؛ url += رشته (رطوبت) ؛ // roost (DHT11) url += "& field3 ="؛ url += رشته (temperature_buiten) ؛ // دمای coop (DS18B20 nr 1) url += "& field4 ="؛ url += رشته (temperature_buiten2) ؛ // دمای خاک (DS18B29 nr 2) url += "& field5 ="؛ url += رشته (bmp.readTemperature ()) ؛ دمای بیرون (BMP180) url += "& field6 ="؛ url += رشته (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 هستند. یکی این کار را با قرار دادن عبارات زیر در تنظیم انجام می دهد:

pinMode (1 ، FUNCTION_3) ؛

pinMode (3 ، FUNCTION_3) ؛

توصیه شده: