lukosław wrote: Sat Feb 13, 2021 11:18 am Przy pomocy wskazówek @klew i kawałka kodu @elmaya dotyczącego innego expandera (EDIT: właśnie wspominanego MCP23017, który znalazłem na forum), udało mi się przygotować prosty skrypt ilustrujący przykład użycia wemosa z ekspanderem PCF8574.
Wrzucam tutaj, może się komuś przyda i zaoszczędzi trochę czasu, bo wątek wydaje się najwłaściwszy.
Mój układ to:
- wemos D1 mini
- układ 4 przekaźników (sterowane stanem niskim)
- 4 przyciski dotykowe TTP223 (podają stan wysoki po dotknięciu)
- moduł ekspandera PCF8574 (czerwony z dip switchem) ustawiony standardowo na adres 0x20
Wykorzystane są wszystkie 8 pinów ekspandera, 0-3 jako wyjścia dla przekaźników i 4-7 jako wejścia dla przycisków. W wemosie wykorzystane są tylko piny D1 i D2 do połączenia z ekspanderem (SCL i SDA).
Przy okazji uwaga. Dużo kłopotu sprawiło mi użycie złej biblioteki do obsługi PCF8574. Nie polecam używać TEJ biblioteki, natomiast TA zadziałała od razu.
Code: Select all
#include <PCF8574.h> #include <SuplaDevice.h> #include <supla/control/button.h> #include <supla/control/relay.h> #include <supla/io.h> #include <supla/network/esp_wifi.h> Supla::ESPWifi wifi("wifi_ssid", "wifi_pass"); PCF8574 pcf8574(0x20); class MyPCF8574 : public Supla::Io { public: void customDigitalWrite(int channelNumber, uint8_t pin, uint8_t val) { if ((pin >= 100) && (pin <= 107)) { pcf8574.write(pin - 100, val); return; } if (pin <= 99) { return ::digitalWrite(pin, val); } } int customDigitalRead(int channelNumber, uint8_t pin) { if ((pin >= 100) && (pin <= 107)) { return pcf8574.read(pin - 100); } if (pin <= 99) { return ::digitalRead(pin); } } } MyPCF8574; Supla::Control::Button button1(104, false, false); Supla::Control::Button button2(105, false, false); Supla::Control::Button button3(106, false, false); Supla::Control::Button button4(107, false, false); Supla::Control::Relay relay1(100, false); Supla::Control::Relay relay2(101, false); Supla::Control::Relay relay3(102, false); Supla::Control::Relay relay4(103, false); void setup() { Serial.begin(115200); delay(500); pcf8574.begin(); char GUID[SUPLA_GUID_SIZE] = {your_guid}; char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {your_authkey}; button1.addAction(Supla::TOGGLE, relay1, Supla::ON_RELEASE); button2.addAction(Supla::TOGGLE, relay2, Supla::ON_RELEASE); button3.addAction(Supla::TOGGLE, relay3, Supla::ON_RELEASE); button4.addAction(Supla::TOGGLE, relay4, Supla::ON_RELEASE); SuplaDevice.setName("device_name"); SuplaDevice.begin(GUID, "svr_address", "email_address", AUTHKEY); } void loop() { SuplaDevice.iterate(); }
jak można za pomocą tego kodu uruchomić sprawdzić pcf8574 na esp8266-01s?
co gdzie pozmieniać? domyślam się ze cyfry od 100 do 107 to nr pin a w esp01s są cztery 1,2,3,4.
dzięki za pomoć.
