ESP8266 - GPIO Erweiterungs Board mit MCP23017 und ESP-01

  • Hier mal eine Lösung für das Problem mit den wenigen bzw. je nach Modul überhaupt nicht vorhandenen frei beschaltbaren GPIOs, vielleicht kann es ja jemand brauchen. :)


    Ich wollte das Board zwar generell eher einfach halten, ein paar Dinge hab ich dann aber doch integrieren müssen. :D
    Etwas das ich bspw. unbedingt haben wollte ist die Möglichkeit den MCP23017 sowohl mit 3.3V als auch mit 5V betreiben zu können. Allerdings wollt ich aus Platzgründen nicht zusätzlich noch einen 5V Regler verbauen sondern hab das so gemacht dass man den MCP einfach per Jumper entweder mit den 3.3V aus dem LM1117 oder der Eingangsspannung direkt versorgen kann.
    Man braucht also wenn der MCP mit 5v betreiben werden soll auch eine Eingangspannung von 5V. Ich verwende da ein einfaches USB Netzteil (Handy Ladegerät).
    Ist die Eingangsppannung höher als 5V muss der MCP daher auf jeden Fall mit 3.3V betrieben werden.


    Die maximale des Reglers (LM1117) liegt zwar theoretisch bei 15V (ich hatte fälschlicherweise im Kopf es wären 16v), praktisch wird sich das allerdings wegen der dann enstehenden Hitze nicht ausgehen. (Muss aber noch schauen wie hoch man sicher gehen kann). Ich würd daher sagen am besten extern runter auf ~5V reglen und dann erst auf das Board gehen.


    Da die 3.3V Pegel des ESP theoretisch nur bis zu einer MCP Versorgungsspannung von ~4.5V reichen hab ich um auch bei 5V auf der sicheren Seite zu sein eine Pegelwandlung integriert. Eine einfache aus 2 Mosfets und 4 Widerständen bestehende Lösung hab ich hier entdeckt: http://playground.arduino.cc/M…i-directionalLevelShifter



    Aktuelle Version
    Auf den Bildern sieht man aktuell die Version 0.2. Angehängt ist aber auch schon die Version 0.3. Allerdings hab ich die bisher noch nicht getestet. Da es da aber nur ein paar kleine Änderungen gab hab ich da überhaupt keine Bedenken und würde auch empfehlen dass ihr die fertigen lässt, hauptsächlich weil die Bohrlöcher für das ESP Modul bei der 0.2er gerade etwas zu klein sind.
    Falls ihr euch fragt was mir der ersten Version passiert ist:
    Da ich den Pegelwandler bevor ich die Platinen gemacht hab nicht ausgiebig getestet hab und zumindest ein "frickelloses" Board haben wollte, hab ich mir einfach gleich 2 Versionen(bzw. Varianten) gemacht und bei der ersten die Pegelwandlung weggelassen. Da der Pegelwandler aber funktioniert wie er soll hab ich die Variante ohne Pegelwandler nicht auch noch angehängt.


    Leider ist sich das mit dem frickellos dann doch nicht ganz ausgegangen da mir durch ein Missgeschick der Plus Pin(VBUS) der Micro USB Buchse abgerissen ist. Konnte das aber einfach mit einer kleinen Drahtbrücke richten, wie man auf dem Bild sehen kann.


    Änderungen Version 0.3
    * Beim zusammenbauen ist mir aufgefallen dass der MCP doch recht nahe beim ESP-01 sitzt, den Abstand hab ich etwas größter gemacht.
    * Der Footprint vom Tantal Kondensator war etwas zu klein
    * Die Bohrlöcher für das ESP Modul waren auch etwas zu klein
    * Falsche maximale Einganspannung korrigiert
    * Bestückungsdruck und ein paar Routen optimiert
    * C5 durch einfachen Pin Header ersetzt


    Ideen für die nächste Version
    * Pegelwandler einfacher überbrückbar machen (Ist aber auch so schon recht einfach möglich)
    * Jemand Ideen/Wünsche? :)



    Bauteilliste:
    * ESP-01
    * MCP23017 + Sockel(28pin) [DIP]


    * LM1117-3.3(AMS1117-3.3) [SOT-223]
    * 10µF Kermik Kondensator am Eingang[0805]
    * 100µF Tantal Kondensator am Ausgang [1210 / Case B]


    * 100nF Kermik Kondensator jeweils am MCP und ESP-01 [THT]


    * Micro USB Buchse (so eine) [SMD]
    * Terminal Block (3.5mm) [THT]
    * 2x Taster "Tactile" (GPIO0, Reset) [THT]
    * SMD LED (1206) + passender Vorwiderstand für 3.3V (0805)
    * 2x 10K Widerstand [THT]
    * 4x 4K7 Widerstand (0805)
    * 2x BSS138 (Oder bspw. 2n7000) (SOT-3)


    * Zusätzlicher I2C Header um bspw. noch ein weiteres MCP23017 Board ranzuhängen


    * Ein paar 2.54mm Stift- und Buchsenleisten


    Falls mir noch was wichtiges einfällt werd ich es ergänzen.
    Sollte was unklar sein einfach Fragen. :thumbs1:



    Bilder


    Unbestückt:



    Bestückt:


    Ein kleines LED Addon das ich mir zum testen gemacht hab


    Version 0.3: (ungetestet)



    (OT PS: Der erwähnte Temp Logger kommt als nächstes. :) )

  • Ja hey joh,
    mein Güte ... da hast Du Dir ja mal wieder was einfallen lassen :thumbs1:
    Aber wie ist das dann mit z.B. verschiedenen Sensoren? Also einen DS18B20, einen DHT22, meinetwegen noch ein PIR dazu ... würde das funktionieren?
    Kann ich mir, ehrlich gesagt, nicht so recht vorstellen ... rein theoretisch müsste dann ja auch I2C und/oder SPI über den Portexpander möglich sein, oder?
    Du hattest da zwar -> hier <- schon mal was dazu geschrieben ... aber so recht verstanden habe ich das nicht. Oder war das in einem anderen Zusammenhang?


    cu,
    -ds-

  • Hey, ds. Danke. :)


    Also an Sensoren hatte ich eigentlich weniger gedacht, eher LEDs, Relais, Taster, LCD oder so. Evenutell langsamere Sensoren wie beispielsweise diese Erdfeuchte Messfühler mit digitalem Ausgang o.ä. :)


    Das erwähnte Sensor Setup hat damit nichts zu tun. Dafür gibt es ein eigenes Board. Hab das aber noch nicht fertig aufgebaut und getestet. Das kommt aber als (über)nächstes.

    DON'T PANIC!

  • Ah ja ... siehste ;) ... dacht' ich's mir doch ...


    Das Problem dürfte auch nicht unbedingt nur die Geschwindigkeit sein. Ich denk' da gibts eher Trouble mit dem GPIO an sich. Du fährst ja z.B. 1Wire Protokoll für einen DS18B20, dann schaltest Du um, und plötzlich soll der gleiche physikalische Pin für das SCK Signal zuständig sein und beim nächsten Umschalten dient der dann vielleicht noch als Rx der rs232 ...


    Ich hatte mir letztes Jahr mal einen Signal-Muxer ( mit einem 74HC4067 ) zugelegt ( da hatte ich -> in diesem Beitrag <- was dazu geschrieben ) und wollte den noch unbedingt ausprobieren. Hat leider bis heute nicht geklappt =(


    bye,
    -ds-

  • Hallo,


    super Projekte die du da immer machst


    gibt es hier vlt auch einen "bsp" code von dir wie du die "neuen" gpios ansprichst ? evtl eine fertige Funktion in lua ?

  • Hey klasse Sache das Teil.
    Bin selber grade am basteln mit dem ESP und hab schon über den MCP nachgedacht.
    Aber was hast du denn da mit dem Resetpin am ESP verkabelt? Das interessiert mich!


    Edit:
    Wo lässt du deine Platinen fertigen? Das sieht immer so megaschnieke aus mit ner richtigen Platine statt den Prototypingboards!

    Edited once, last by DerMega ().

  • Hi GMaN, Danke.


    Ich verwende für die Ansteuerung im Moment dieses Modul:
    https://github.com/tuxBurner/e…ster/lua_scripts/mcp23017


    Um das Board zu testen hab ich mir das hier programmiert:
    (Wobei ich mir die Zeilen(die ersten 12 in der on:receive Funktion) mit denen die GET Paramter in Lua Arrays "verwandelt" werden hier abgeschaut hab: http://randomnerdtutorials.com/esp8266-web-server/
    (ist imho das genialste (und komplizierteste) an dem code)



    Damit kann ich jetzt bspw. so:

    Code
    curl -s "http://192.168.1.111/?pin=9&state=1"


    GPB0 auf HIGH,
    und so:

    Code
    curl -s "http://192.168.1.111/?pin=9&state=0"


    auf LOW setzen.


    Mehr wie einzelne Pins zu setzen ist mit dem Skript noch nicht möglich. Mehrere Pins gleichzeitig setzen und Pins lesen kommt noch.
    Dafür fangt das Skript alle falschen Eingaben ab wodurch es nicht möglich ist den ESP durch einen falschen Parameter zum absturz zu bringen. :)
    Bei einer fehlbenutzung wird auch eine Fehlermeldung und kurze (HTML) Hilfe ausgegeben.


    Hier noch die init.lua dazu:


    Sieht bestimmt aufwändiger aus als sie ist.
    In den ersten paar Zeilen wird geprüft ob RX beim start mit GND verbunden ist. Fallls ja macht der ESP einen eigenen AccessPoint auf, falls nicht verbindet er sich mit dem hinterlegten. Anschließend wird in beiden Fällen der "API (Web)Server" (das Skript oben) gestartet.



    [hr]
    Hey Mega, thx.
    Mir sind einfach nur die unmodifizierten ESP-01 Module ausgegangen. :lol: Die Verbindung ist für den normalen Betrieb nicht nötig.
    Der ESP könnte sich dadurch aber wenn er in den DeepSleep versetzt wird um Strom zu sparen wieder selber "aufwecken"(resetten).


    Die Platine(n) hab ich hier fertigen lassen: http://de.vrint-pcb.com/show/7-pcb's
    Aber nur weil die so ein nettes Angebot für Neukunden hatten(und immer noch haben).
    War aber meine erste eigene Platinenbestellung. Sonst macht das immer Neueinsteiger (:danke_ATDE:) für mich. :D
    Ich weiß jetzt aber gar nicht wo er die immer machen lässt.

    DON'T PANIC!