ESP8266 + 2.8”TFT + Touch panel = základ pro malý HMI

TFTTouch2_webMeteostanice pro Jirky bude obsahovat grafický TFT displej pro zobrazování měřených hodnot a pro snadnější ovládání jsem navrhl i použití dotykového panelu. Jak já, tak Jirka jsme objednali z Číny vzorky – Jirka měl větší štěstí a panel mu přišel, zatímco já musel objednávat znovu. Pro urychlení vývoje mi ale Jirka svůj panel poslal, takže jsem mohl začít s rozhýbáním základních metod, které jsou nutné pro dosažení cíle. Vzhledem k omezenému počtu I/O pinů na ESP8266 jsme vybrali panel s SPI rozhraním jak pro TFT část, tak pro touch kontrolér. Toto rozhodnutí sice umožnilo připojení k ESP, ale současně vytvořilo některá úskalí, o kterých se více rozepíši v článku…

Že je možné displej takto k ESP připojit jsem věděl na základě pokusů odsud http://nailbuster.com/?page_id=341 takže něco do začátku jsem přece jen měl, ale po zapojení a odzkoušení jsem zjistil tragicky špatný výkon celé sestavy. Z důvodu maximálního kmitočtu hodin pro XPT2046 2MHz celé vykreslování probíhalo neuvěřitelně pomalu. Navíc jsem věděl o optimalizovaných Adafruit knihovnách, které mají větší výkon odsud http://www.instructables.com/id/Arduino-analogue-ring-meter-on-colour-TFT-display/, takže přišel čas na optimalizace. Původní Adafruit knihovna byla nahrazena knihovnou optimalizovanou, ovladač displeje s řadičem ILI9340 byl nahrazený optimalizovaným ovladačem s podporou transakcí, 16-ti bitovým přístupem na SPI (ani už si nepamatuji všechny změny, které jsem udělal…) a ovladač XPT2046 byl přepracovaný na transakce na SPI s omezením kmitočtu hodin na 2MHz.

Pro účely testování jsem původní dva příklady (kalibrace a jednoduchý Paint program) spojil do jednoho a přepracoval jej tak, aby byla možná aktualizace přes OTA. Výsledek vypadá takto:

TFTTouch_web

Čtení dotykového panelu probíhá na 2MHz a vykreslování pak na maximálním kmitočtu, kterého jsem byl schopen dosáhnout. Vše se zdá pracuje správně, ale jedna chyba se přece projevuje – občas se objeví rušení na vstupech touch řadiče a ten detekuje špatné souřadnice, ale tato situace se dá vyřešit digitální filtrací čtených informací. Vlastně jsem zjistil, že se dotykový panel zdaleka nemusí číst tak často a zbytečně ztrácím výkon, který můžu využít pro vykreslování…

Na závěr, jako obvykle, uvedu použité prostředí:

  • OS Linux Ubuntu Gnome
  • Arduino IDE 1.6.7
  • ESP8266 Core 2.1.0
  • V projektu je aktualizovaná knihovna WiFiConfig v poslední verzi s Captive portálem a ošetřeným přesměrováním, současně je použit HTML5 validátor pro zadávání NETBIOS/DNS jména zařízení a dále je doplněna možnost uživatelských parametrů při konfiguraci.

Těsně před odkazem na soubor ještě jedna informace – pro generování souboru pro stažení jsem zkusil použít funkci “Archivuj projekt” v IDE, takže pokud archív obsahuje chyby, tak mi to napište do komentářů, abych je mohl odstranit.

 

Esphmi-160306c
Esphmi-160306c
esphmi-160306c.zip
27.8 KiB
1630 Downloads
Detaily

68 komentářů u „ESP8266 + 2.8”TFT + Touch panel = základ pro malý HMI“

  1. knihovnu wificonfig mám staženou, tak snad v týdnu vyzkouším a dám vědět.

    1. Ok. Díky. Snad se během týdne dostanu k tomu, abych doplnil ip adresy – nejhorší pro mě stejně bude modifikace HTML kódu aby to nějak vypadalo…

  2. Kde se da sehnat knihovna Adafruit_GFX_AS8 ?
    Je pouzita ve zdrojaku ale nemuzu ji nikde najit a Google taky nepomaha. Diky

  3. Ahojte,

    narazil jsem na tuto stranku pri hledani odpovedi na muj problem, a tohle se mi zda uz byt oprapvdu tesne vedle. 🙂 Jsem naprosty amater, laik a nerad otravuju, nicmene i tak, bych se rad zeptal na jednu vec. Koupil jsem si stary Wemos D1 a k tomu mam displej od Cinana. http://www.aliexpress.com/item/2-8-inch-TFT-Touch-LCD-Screen-Display-Module-Forarduino-UNO-R3-HIGH-QUALITY-Free-Shipping/32272339922.html

    Displej jsem rozchodil na standardnim UNO bez problemu (tim samozrejme myslim po asi 6ti hodinach hledani 🙂 ), ale s WEMOS D1 mam problem. Nemohl by mi nekdo poradit, treba i ty, Pablo? Zda se mi, ze displej sam o sobe nema SPI rozhrani, nebo se mylim (rozhrani SPI je tam urcite pro SD kartu)? Jestli jsem to dobre pochopil, tak data si displej posila pres 8bitovou sbernici, jenze Wemos D1 nema zadny port/registr sdruzujici piny. Muj dotaz je, jestli je mozne tohle omezeni nejak obejit, nebo je to v pytli? Nebo jsem uplne mimo…?

    Jinak ta desticka Wemos D1 funguje jak fik, Wifi fakt krasne slape, ale ten displej k tomu, to by bylo dobry jak knedlo vepro.

    1. Ahoj. Ten displej má s největší pravděpodobností paralelní rozhraní. Technicky to řešitelný je, ale ne na Wemos D1, který nemá obsazené všechny vývody (a většina pinů ESP je zdvojená na konektoru Arduina),. Nouzově by to šlo vyřešit nějakým serial->paralel. převodníkem, třeba přes I2C PCF8574, nebo posuvným registrem, třeba HC595, ale rychlost bude žalostná a spíš se vyplatí investovat do SPI displeje.

      1. Rozumim, a souhlasim, Cinanci si zas vydelaj nejakou babku. 🙂 Jinak perfektni blog, co tu mas, diky za vsechno to sdileni!

      2. Přes HC595 to nemá důvod být pomalé, existuje knihovna přesně pro tohle i na esp. mám ověřeno .

  4. Ahoj, mám problém již při kompilaci … mi hlásí …
    esphmi:32: error: ‘Adafruit_GFX_Button’ does not name a type

    ???

    Pomůže někdo ?

    Dík Marek

    1. Ahoj. Můj odhad je, že to je stará Adafruit knihovna, která ještě neměla třídu pro tlačítko… Mmnt, hledám řešení… Takže řešením je stáhnout knihovnu, která je odkazovaná v komentářích. Pak by překlad měl běžet bez potíží. Celý projekt je už dost starý – udělám aktualizaci, ale chvíli to zabere…
      Pavel

        1. Hi Daniel,
          this code is just an example of how to connect SPI TFT with touch panel to the ESP8266 and how to handle both peripherals in software.

  5. Stahuji, vyzkouším. Ještě jednou díky za rychlost a ochotu … Marek … PS: Vysledek hned napíšu

    1. No ale to je správně že. Displej se nainicializoval a nepřipojil se k žádné WiFi síti – je třeba se připojit k němu mobilem a připojit ho k domácí WiFi… Pak naběhne i OTA.

  6. Promiň, pokouším se, ale teď už píše trying connect …. a jinak nic i když jsem mu nastavil wifi síť …. pak se ještě objeví modrý kalibrační křížek … ale jinak na nic nereaguje … :

    1. Pokud se objeví kalibrační křížek, tak už se k WiFi připojil – ťukni na něj a měl by se objevit zase jinde (kalibrace dotykového panelu). Pokud nereaguje na dotyky, tak je problém v/s touch řadičem.

  7. No právě … V levo nahoře stále píše : Trying to connect …. pod tím je kalibrační křížek na který můžu ťukat jak chci a stále nic. Prostě ten touchscreen nemohu rozchodit … 🙁
    Zapojený to mám stejně jako Ty viz. odkazy …. 🙁 zkusím jeětě jiný displej, jdu pro něj do auta, ale pak už nevím … Marek

    1. No tak pak už jen klasika – osciloskop. Zkus prověřit, jestli chodí CS na Touch řadič a zbývající SPI signály. Pokud ano, tak si zkus napsat jednoduchý skript, který bude obsahovat jen obsluhu Touch řadiče – zavolej třeba begin a monitoruj isTouching – jakmile se dotkneš panelu, tak by mělo vyskočit přerušení. Nebo zkus vyčítat surová data pomocí getRaw – z toho všeho se dá usuzovat, v čem je problém. Do setup() napiš za wifi.begin(…) tohle tft.println("Connected.");, ať Tě nemate jen výpis, že se snaží připojit…

  8. Tak displejm to není, zkusil jsem i nový 🙁 jesli mám správně zapojeno:
    T_IRQ D1
    T_DO D6
    T_DIN D7
    T_CS D2
    T_CLK D5

    1. Hele k čemu to máš připojený? (typ modulu) Některý moduly mají chybu se špatně označeným GPIO4 a GPIO5 (přehozené)…

  9. Ahoj, bohužel nemám osciloskop, 🙁 pokusil jsem se napsat testovací skript, ale pořád nic ….. jsem v nějakém začarovaném kruhu …. už mě nic nenapadá …. Ale stejně díky za ochotu. Marek

  10. Tak jsem se pokusil o https://www.xpablo.cz/?wpfb_dl=27 ale nedaří se mi ani kompilace 🙁 [Arduino IDE 1.6.12]

    sketch/esphmi.ino.cpp.o:(.text.startup._GLOBAL__sub_I_nbns+0x8): undefined reference to Adafruit_ILI9340_AS8::Adafruit_ILI9340_AS8(signed char, signed char, signed char)'
    sketch/esphmi.ino.cpp.o:(.text.startup._GLOBAL__sub_I_nbns+0xc): undefined reference to
    XPT2046::XPT2046(unsigned char, unsigned char)’
    sketch/esphmi.ino.cpp.o:(.text.startup._GLOBAL__sub_I_nbns+0x10): undefined reference to Adafruit_GFX_Button::Adafruit_GFX_Button()'
    sketch/esphmi.ino.cpp.o: In function
    __static_initialization_and_destruction_0′:
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:29: undefined reference to Adafruit_ILI9340_AS8::Adafruit_ILI9340_AS8(signed char, signed char, signed char)'
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:30: undefined reference to
    XPT2046::XPT2046(unsigned char, unsigned char)’
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:30: undefined reference to Adafruit_GFX_Button::Adafruit_GFX_Button()'
    sketch/esphmi.ino.cpp.o:(.text._ZL14calibratePointttRtS_+0x8): undefined reference to
    Adafruit_ILI9340_AS8::drawFastHLine(short, short, short, unsigned short)’
    sketch/esphmi.ino.cpp.o:(.text._ZL14calibratePointttRtS_+0xc): undefined reference to Adafruit_ILI9340_AS8::drawFastVLine(short, short, short, unsigned short)'
    sketch/esphmi.ino.cpp.o:(.text._ZL14calibratePointttRtS_+0x10): undefined reference to
    NBNS::poll()’
    sketch/esphmi.ino.cpp.o:(.text._ZL14calibratePointttRtS_+0x18): undefined reference to XPT2046::getRaw(unsigned short&, unsigned short&, XPT2046::adc_ref_t, unsigned char) const'
    sketch/esphmi.ino.cpp.o: In function
    calibratePoint’:
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:61: undefined reference to Adafruit_ILI9340_AS8::drawFastHLine(short, short, short, unsigned short)'
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:64: undefined reference to
    Adafruit_ILI9340_AS8::drawFastVLine(short, short, short, unsigned short)’
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:64: undefined reference to NBNS::poll()'
    sketch/esphmi.ino.cpp.o: In function
    XPT2046::isTouching() const’:
    sketch/lib/XPT2046_T/XPT2046_T.h:26: undefined reference to XPT2046::getRaw(unsigned short&, unsigned short&, XPT2046::adc_ref_t, unsigned char) const'
    sketch/esphmi.ino.cpp.o: In function
    calibratePoint’:
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:69: undefined reference to Adafruit_ILI9340_AS8::drawFastHLine(short, short, short, unsigned short)'
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:69: undefined reference to
    Adafruit_ILI9340_AS8::drawFastVLine(short, short, short, unsigned short)’
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:72: undefined reference to XPT2046::getCalibrationPoints(unsigned short&, unsigned short&, unsigned short&, unsigned short&)'
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:72: undefined reference to
    XPT2046::setCalibration(unsigned short, unsigned short, unsigned short, unsigned short)’
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:73: undefined reference to Adafruit_GFX_AS8::setTextColor(unsigned short)'
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:73: undefined reference to
    Adafruit_GFX_AS8::setTextSize(unsigned char)’
    sketch/esphmi.ino.cpp.o:(.text._Z9calibratev+0x2c): undefined reference to XPT2046::getCalibrationPoints(unsigned short&, unsigned short&, unsigned short&, unsigned short&)'
    sketch/esphmi.ino.cpp.o: In function
    calibrate()’:
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:78: undefined reference to XPT2046::setCalibration(unsigned short, unsigned short, unsigned short, unsigned short)'
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:79: undefined reference to
    Adafruit_GFX_AS8::setTextColor(unsigned short)’
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:80: undefined reference to Adafruit_GFX_AS8::setTextSize(unsigned char)'
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:82: undefined reference to
    Adafruit_GFX_AS8::setTextSize(unsigned char)’
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:90: undefined reference to WiFiDeviceName'
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:92: undefined reference to
    Adafruit_GFX_AS8::width()’
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:92: undefined reference to Adafruit_GFX_AS8::height()'
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:93: undefined reference to
    XPT2046::begin(unsigned short, unsigned short)’
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:93: undefined reference to Adafruit_ILI9340_AS8::begin()'
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:93: undefined reference to
    Adafruit_ILI9340_AS8::fillScreen(unsigned short)’
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:94: undefined reference to WiFiConfig::begin(int, unsigned char, void (*)(wificonfigstate_t))'
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:94: undefined reference to
    NBNS::begin(char const*)’
    sketch/esphmi.ino.cpp.o:(.text.setup+0x54): undefined reference to Adafruit_GFX_Button::initButton(Adafruit_GFX_AS8*, short, short, unsigned char, unsigned char, unsigned short, unsigned short, unsigned short, char*, unsigned char)'
    sketch/esphmi.ino.cpp.o:(.text.setup+0x58): undefined reference to
    Adafruit_GFX_Button::drawButton(unsigned char)’
    sketch/esphmi.ino.cpp.o:(.text.setup+0x88): undefined reference to Adafruit_GFX_AS8::width()'
    sketch/esphmi.ino.cpp.o:(.text.setup+0x92): undefined reference to
    Adafruit_GFX_AS8::height()’
    sketch/esphmi.ino.cpp.o:(.text.setup+0xa1): undefined reference to XPT2046::begin(unsigned short, unsigned short)'
    sketch/esphmi.ino.cpp.o:(.text.setup+0xa9): undefined reference to
    Adafruit_ILI9340_AS8::begin()’
    sketch/esphmi.ino.cpp.o:(.text.setup+0xb3): undefined reference to Adafruit_ILI9340_AS8::fillScreen(unsigned short)'
    sketch/esphmi.ino.cpp.o:(.text.setup+0xbe): undefined reference to
    Adafruit_GFX_AS8::setTextColor(unsigned short)’
    sketch/esphmi.ino.cpp.o: In function setup':
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:99: undefined reference to
    WiFiConfig::begin(int, unsigned char, void (*)(wificonfigstate_t))’
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:102: undefined reference to NBNS::begin(char const*)'
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:118: undefined reference to
    Adafruit_GFX_Button::initButton(Adafruit_GFX_AS8*, short, short, unsigned char, unsigned char, unsigned short, unsigned short, unsigned short, char*, unsigned char)’
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:118: undefined reference to Adafruit_GFX_Button::drawButton(unsigned char)'
    sketch/esphmi.ino.cpp.o: In function
    function’:
    /Users/jt/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/xtensa-lx106-elf/include/c++/4.8.2/functional:2452: undefined reference to XPT2046::getPosition(unsigned short&, unsigned short&, XPT2046::adc_ref_t, unsigned char) const'
    sketch/esphmi.ino.cpp.o: In function
    setup’:
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:142: undefined reference to Adafruit_ILI9340_AS8::drawPixel(short, short, unsigned short)'
    sketch/esphmi.ino.cpp.o: In function
    function’:
    /Users/jt/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/xtensa-lx106-elf/include/c++/4.8.2/functional:2453: undefined reference to Adafruit_GFX_Button::contains(short, short)'
    sketch/esphmi.ino.cpp.o: In function
    setup’:
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:142: undefined reference to Adafruit_GFX_Button::press(unsigned char)'
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:142: undefined reference to
    Adafruit_GFX_Button::justReleased()’
    sketch/esphmi.ino.cpp.o: In function ~function':
    /Users/jt/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/xtensa-lx106-elf/include/c++/4.8.2/functional:2174: undefined reference to
    Adafruit_GFX_Button::justPressed()’
    sketch/esphmi.ino.cpp.o: In function setup':
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:148: undefined reference to
    NBNS::poll()’
    sketch/esphmi.ino.cpp.o: In function loop':
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:149: undefined reference to
    XPT2046::getPosition(unsigned short&, unsigned short&, XPT2046::adc_ref_t, unsigned char) const’
    sketch/esphmi.ino.cpp.o: In function XPT2046::isTouching() const':
    /Users/jt/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/xtensa-lx106-elf/include/c++/4.8.2/bits/unique_ptr.h:67: undefined reference to
    Adafruit_ILI9340_AS8::drawPixel(short, short, unsigned short)’
    sketch/esphmi.ino.cpp.o: In function loop':
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:168: undefined reference to
    Adafruit_GFX_Button::contains(short, short)’
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:168: undefined reference to Adafruit_GFX_Button::press(unsigned char)'
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:168: undefined reference to
    Adafruit_GFX_Button::justReleased()’
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:171: undefined reference to Adafruit_ILI9340_AS8::fillScreen(unsigned short)'
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:175: undefined reference to
    Adafruit_GFX_Button::drawButton(unsigned char)’
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:178: undefined reference to Adafruit_GFX_Button::justPressed()'
    /Users/jt/Documents/Arduino-2/xpablo.cz/esphmi/esphmi.ino:178: undefined reference to
    Adafruit_GFX_Button::drawButton(unsigned char)’
    collect2: error: ld returned 1 exit status
    exit status 1
    Error compiling for board NodeMCU 0.9 (ESP-12 Module).

    1. Vyřešeno: Přiližené knihovny z adresáře lib/ je třeba zkopírovat přímo do Arduino/libraries a adekvátně změnit příslušné #include nějak takto:

      #include “espnbns.h”
      #include “Adafruit_ILI9340_AS8.h”
      #include “Adafruit_GFX_AS8.h”
      #include “XPT2046_T.h”
      #include “WiFiConfig.h” // WiFiConfig xpablo.cz

    1. Verzi vždycky uvádím v článku… Zítra odpoledne za mnou přijede Jirka, o kterém se občas zmiňuji v souvislosti s meteostanicí, právě pro displej, takže se na to kouknu a dám vědět.

      1. Takže jsem na to přišel. Problém je ve verzi IDE, kdy některé verze odmítají podadresáře, pokud se nejmenují lib nebo src. Je třeba toto upravit a pak překlad běží.

          1. Ano a v tom je právě problém. Novější verze IDE potřebují, aby se jmenoval src, takže je třeba ho přejmenovat a upravit odpovídající include…

          2. Nepochopil, opravil, funguje:
            #include “src/espnbns/espnbns.h”
            #include “src/Adafruit_ILI9340_AS8/Adafruit_ILI9340_AS8.h”
            #include “src/Adafruit_GFX_AS8/Adafruit_GFX_AS8.h”
            #include “src/XPT2046_T/XPT2046_T.h”
            #include “src/WiFiConfig/WiFiConfig.h” // WiFiConfig xpablo.cz

  11. Zdravím všechny, super návod, díky. Měl bych ale dotaz, je nějaký způsob jak u displeje měnit jas/kontrast? Předpokládám použití foto resistoru, ale chybí mi to základní, jestli existují příkazy jak jas/kontrast displeji nastavit.

    Předem díky moc.
    Lukas

    1. Bohužel – kontrast by (snad) mohl jít nastavit zápisem do registru VCM control (0xc5 – doporučuji přečíst datasheet), ale jas by vyžadoval PWM výstup pro řízení podsvitu a na to už mi nevyšla GPIO noha. Jedinou možností, která mě napadá je, pokud není potřeba sériový port, použít vývod TXD, nebo RXD pro řízení intenzity podsvitu. Nejlépe asi předělat zapojení – GPIO5 použít jako řízení podsvícení a RXD použít pro T_IRQ… Ovšem to chce vyzkoušet!

      1. Nešlo by pro řízení intenzity podsvitu přes PWM použít D3=GPIO0 ?
        Kromě řízení intenzity podsvitu bych ještě rád připojil senzor osvětlení (asi fotorezistor aka LM393 na A0, jelikož pro I2C je třeba dvou dalších noh).
        Dám vědět, až se to pevede.

        1. Asi šlo, ale nakonec jsem to v nejnovější verzi vyřešil jinak – T_CS jsem připojil na GPIO0, IRQ na GPIO16 (vím, že GPIO16 neumí interrupt, ale stejně to budu pollovat, takže to nevadí). Tím jsem si uvolnil GPIO4 a 5 pro I2C a řízení podsvitu řeším přes I2C periferii. PCB jsou ve výrobě v Seeed, takže jak přijdou, bude další článek…

  12. PWM regulace podsvícení funguje. Mám ale dojem, že i při 100% PWM je jas nižší, než přímo na 3V3.

    Zapojeno stejně, pouze
    T_CS přepojeno na D0=GPIO16.

    Pro PWM lze nyní využít D1 nebo D2 (případně RXD/TXD, ale tím se asi rozbije sériová linka a nepůjde flashnout přes USB ale pouze OTA?).
    Pro současné použití PWM a I2C tedy schází jedna noha (leda by se obětovala sériová linka).
    Takže fotorezistor plánuji na A0.

    1. Jen mi není jasné jedna věc: Když D0=GPIO16 neumí interrupt, jaktože to vlastně funguje? 🙂

  13. Ještě dotaz: Mám D0=GPIO16 nějaký speciální a natolik důležitý význam, že by stálo zato jej držet volný?
    Chtěl bych brzy nechat udělat PCB a nechci si zavřít zadní vrátka…

    1. GPIO16 je vývod z RTC, který se spojuje s RESET pro probuzení z deep sleep, ale zrovna v této konstrukci asi význam mít nebude 🙂 …

      1. Zatím mne na TCCRESET žádné v tomto projektu aspoň trochu smysluplné, resp. realizovatelné vyžití nenapadlo. Mělo by to čekat na interakci uživatele a ne spát. Napájení ze sítě takže šetřit netřeba.

        I když… Stran deep sleep jsem uvažoval, zda to nezapojit tak šikovně, aby šlo uspat celé zařízení kromě touch, aby šlo probudit dotykem. V takovém případě by se ovšem přece jen mohlo hodit, kdyby se to čas od času probralo samo (nějaký keep alive ping směrem k serveru atp). Zatím jsem ale nestudoval, co to deep sleep vlastně obnáší (udrží to obsah na displeji,?wifi připojení?). Ale asi se mi s tím nechce hrát, nutné to není.

        BTW, prozradíte, jak budete řídit jas přes I2C? 🙂

        1. Deep sleep je sice nejúspornější režim ESP, ale dostat z něj se dá jedině resetem. Obsah displeje to sice přežije, ale během spánku je WiFi odpojené. To, co by asi vyhovovalo je režim light sleep – wifi se periodicky probouzí. Pokud ale máte dost energie, tak bych to neřešil.
          Jas přes I2C lze řídit např. použitím PCA9685, ale já jsem zvolil cestu, kdy naprogramuji ATTiny85 jako I2C slave, který řídí PWM a kontroluje PIR/RCWL-0516 senzor na přítomnost osoby před LCD (šel jsem cestou úspory napájení zhasnutím displeje, když před ním nikdo není).

  14. Dobrý den,
    Rád bych svůj projekt, inspirovaný a s Vaší pomocí odladěný, zdokumentoval a zveřejnil. Přešel jsem (kvůli custom fontům) k originál AdafruitGFX, resp. Adafruit_ILI9341 knihovně (myslím, že ty věci s transakcemi už spravili, moc tomu nerozumím, ale nepozoruji žádné potíže).
    Potíž je ovšem s XPT2046_T, když ji nahradím XPT2046, nefunguje to.
    Mám tedy “licenční” prosbu: Můžu Vaši XPT2046_T zveřejnit jakožto součást vlastního projektu a pokud ano, co k ní mám připsat? Nechci ji vydávat za svou.
    Zdraví a děkuje JT

    1. Dobrý večer,
      klidně ji zveřejněte, jen prosím někam umístěte odkaz ke mě na stránky, popřípadě se o tom zmiňte v texu. To mi stačí… Klidně se pak podělte o odkaz na projekt – rád se podívám… 🙂

        1. V žádném případě nechci otravovat, ale kdybyste měl svůj modifikovaný XPT2046_T na githubu (a případně napsal spapadim-ovi ať to přidá do svého projektu), byly by tím všechny licenční potíže vyřešeny.
          Ale to je jen nesmělá prosba 😉

          1. Kdybych měl projekty na githubu, tak by potíže vyřešeny nebyly, jen by byly nahrazeny jinými s větší zátěží pro mě. Umístění zde je jednoduše moje volba, pro kterou mám své důvody. Co se týče licence, tak v čem je vlastně problém? V adresáři s XPT2046_T, pokud dobře vidím v archívu, je soubor LICENSE GNU GPL …

  15. Ok, nemám problém, jen nechci nikoho naštvat. Sám pořádně licencování nerozumím, tak jsem jenom opatrný.
    Dám tedy XPT2046_T tak, jak jsem jej od Vás stáhl, spolu s odkazem na Vaše stránky a nějakým stručným komentářem přímo do svého projektu.
    Omlouvám se za asi zbytečnou obezřetnost.

    1. Ok, s tím nemám problém. Díky. Shodou okolností budu tuhle knihovnu brzy oprašovat a aktualizovat pro jedno zařízení, ale žádné zásadnější změny neplánuji.

  16. zdravim ,pouzil som tento tvoj projekt na zobrazovanie udajov z ip meteo stanice , fungovalo mi to mesiac bez vypadku a teraz mam problem asi nieco z wifi sietou , problem je vtom ,ze ked je aj kratky vypadok wifi ,esp sa nepripoji , vsetko funguje len sa nechce znova pripojit do siete tym padom udaje na lcd nevie aktualizovat, az ked ho resetnem pripoji sa znova do wifi siete a funguje dalej, nevies mi poradit co mam upravit aby sa pri vypadku siete pripojil? Pouzivam aj ine esp s klasickym prikladovym klientom a ten sa vzdy po vypadku wifi pripoji niektore mi idu uz rok bez vypadku spojenia, v tomto tvojom sa trocha stracam. dakujem za odpoved s pozdravom MK

    1. Ahoj,
      bohužel jsi nenapsal verzi Core, kterou používáš, takže to jen odhadnu – to, co popisuješ vypadá jako chyba, která se objevila v Core verze 2.4.0 ( https://github.com/esp8266/Arduino/issues/4453 ). Pokud to tak je, zkus aktualizovat na 2.4.1 a znovu to vyzkoušej. Pokud to tak není, tak zkus doplnit výpisy WiFi.status() na vhodná místa, ať se přiblížíme zdroji problému…
      Pavel

  17. dal som najnovsiu verziu a nejde to uz skompilovat

    Arduino: 1.8.2 (Windows 10), Vývojová doska:”WeMos D1 R2 & mini, 80 MHz, 4M (1M SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 921600″

    Voľby pre zostavenie sa zmenili, zostavujem všetko znova
    In file included from C:\Users\MILOS\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.1\cores\esp8266/Arduino.h:255:0,

    from sketch\src\Adafruit_GFX_AS8\Adafruit_GFX_AS8.h:7,

    from sketch\src\Adafruit_GFX_AS8\Adafruit_GFX_AS8.cpp:45:

    sketch\src\Adafruit_GFX_AS8\Adafruit_GFX_AS8.cpp: In member function ‘virtual int Adafruit_GFX_AS8::drawChar(unsigned int, int, int, int)’:

    sketch\src\Adafruit_GFX_AS8\Adafruit_GFX_AS8.cpp:737:45: error: invalid conversion from ‘long unsigned int’ to ‘const void*’ [-fpermissive]

    line = pgm_read_byte(flash_address+w*i+k);

    ^

    C:\Users\MILOS\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.1\cores\esp8266/pgmspace.h:115:51: note: in definition of macro ‘pgm_read_byte’

    #define pgm_read_byte(addr) pgm_read_byte_inlined(addr)

    ^

    C:\Users\MILOS\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.1\cores\esp8266/pgmspace.h:101:23: error: initializing argument 1 of ‘uint8_t pgm_read_byte_inlined(const void*)’ [-fpermissive]

    static inline uint8_t pgm_read_byte_inlined(const void* addr) {

    ^

    sketch\src\Adafruit_GFX_AS8\Adafruit_GFX_AS8.cpp:777:45: error: invalid conversion from ‘long unsigned int’ to ‘const void*’ [-fpermissive]

    line = pgm_read_byte(flash_address+w*i+k);

    ^

    C:\Users\MILOS\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.1\cores\esp8266/pgmspace.h:115:51: note: in definition of macro ‘pgm_read_byte’

    #define pgm_read_byte(addr) pgm_read_byte_inlined(addr)

    ^

    C:\Users\MILOS\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.1\cores\esp8266/pgmspace.h:101:23: error: initializing argument 1 of ‘uint8_t pgm_read_byte_inlined(const void*)’ [-fpermissive]

    static inline uint8_t pgm_read_byte_inlined(const void* addr) {

    ^

    exit status 1
    Nastala chyba pri kompilácii pre dosku WeMos D1 R2 & mini.

    Táto správa by mala mať viac informácií v
    “Zobrazenie podrobného výstupu pri kompilácii”
    podľa zapnutá voľba v Súbor -> Nastavenia.

  18. Hi Pablo! I was interested in your project but, I do not understand your language, so I ask you: is your sketch working correctly now?
    I also notice that in your “esphmi” sketch there is no SSiD or Password; is that so? Does he find the access point automatically?
    PS. Is it a weather station?
    Thank you very much

    1. Hi Daniel,
      probably not – the code is very old so it need to be modified in some ways. For example my nbns client is now built into Arduino Core so it has to be removed/modified in the sketch. To connect to the WiFi network it uses my WiFiConfig library (also published here @ xpablo.cz). This library allows to select the AP and enter the password via Captive portal web page. Weather station was built on this code.

Komentáře nejsou povoleny.