Output oder input-pin am ESP32? Wie komme ich zu mehr pins?

Bin gerade dabei ein

  • RFM95-Modul
  • SIM800-Modul
  • HX711
  • DS18B20
  • BME280 / I2C und
  • I2S-Mic

an einen ESP32 anzuschließen und mir gehen etwas die “normalen”, also als output und / oder input nutzbaren pins aus. Daher muss ich einige der wenigen input only-pins des ESP (GPIO 34, GPIO 35, GPIO 36, GPIO 39) ebenfalls verbraten, bin mir aber nicht sicher, welche pins der Module oben nun “input only” für den ESP sind und vom Modul als output genutzt werden, alleine um Daten zu schicken, aber keine zu empfangen.

Beim RFM Modul sind per SPI die pins für MISO, MOSI, SCK fest vorgegeben. Wäre MISO ein Kandidat oder braucht der nen (internal) pull up, die input only pins haben beim ESP aber keine internal pull-up oder pull-downs. NSS / CS braucht einen output pin, also nix zum verlegen. Die beiden DIOx pins sind softwaretechnisch so unter GitHub - mcci-catena/arduino-lmic: LoraWAN-MAC-in-C library, adapted to run under the Arduino environment beschrieben:

In LoRa mode the DIO pins are used as follows:

DIO0: TxDone and RxDone
DIO1: RxTimeout

D.h. DIO0 wird bidirektional als input und output genutzt, hab’ ich das richtig interpretiert? DIO1 ist Rx, also Reciver, braucht somit auch einen ouput pin am ESP32.

Das SIM800 hat TX und RX, da könnte ich TX mit einem input only-pin verwenden!
[todo checken, ob TinyGSM (die verwendete lib) einen internen INPUT_PULLUP/DOWN aktivieren möchte]

Beim HX711 haben wir DT als input, allerdings mit INPUT_PULLUP, die “input only pins” beim ESP haben aber keine internal pull-ups. den DT könnten wir zur Not mit einem exteren pullup verwenden.

Der Data-pin des DS18B20 arbeitet bidirektional, als nix mit input only.

Beim BME280 sind wir mit I2C auch schnell fertig, SDA ist bidirektional und SCL output. Damit auch keine Option für einen input only.

Beim I2S-Mic haben wir CLK, WS und SD / Data. Ich staune gerade über den https://de.wikipedia.org/wiki/I²S Artikel. da steht “keine bidirektionale Kommunikation”. Auf https://docs.arduino.cc/learn/built-in-libraries/i2s steht “the device who generates SCK and WS is the Controller”, also output pins des ESP dafür. Wenn SD / Data aber nicht bidirektional ist, könnten wir auf ESP-Seite einen input only pin für I2S Data / SD verwenden!

Alternativen:

Ich könnte identische Pins für RFM95 und SIM800 verwenden, da vermutlich nicht beide parallel zum Einsatz kommen. Will ich aber eigentlich nicht, falls man doch mal per RFM Daten empfangen möchte und dann per GSM wegschicken muss, da kein LoRa-Gateway in der Nähe ist.

Folgende pins verwende ich bisher nicht: GPIO0, GPIO1 (TX), GPIO3 (RX), GPIO2 (onboard LED) und wollte sie eigentlich vermeiden, wegen https://randomnerdtutorials.com/esp32-pinout-reference-gpios/ :

Siehe auch Strapping Pins explanation - ESP32 Forum

Doch einen von denen noch nutzen?

Idee von @Andreas: gleich den cut machen: HX711 runterwerfen und statt dessen den NAU verwenden, spart auch zwei pins, da der NAU über I2C angesprochen wird.

1 Like

Hier das Pinout des Firebeetle 2:

… und die bisher vorgesehenen pins, mit pins durchgestrichen GPIOs, die in der Kombination nicht passen / nicht funktionieren und auf jeden Fall geändert werden müssen:

Firebeetle 2 pin Modul / pin Bemerkung
GPIO 0 occupied when using USB transmission*
GPIO 1 UART0_TX occupied when using USB power supply and serial printing*
GPIO 2 onboard LED
GPIO 3 UART0_RX occupied when using USB power supply and serial printing*
GPIO 4 SIM800 RX
GPIO 12 SIM800
power switch
switched voltage via add. external circuit
GPIO 13 HX711 DT
GPIO 14 HX711 SCK
GPIO 15 I2S-Mic WS
GPIO 16 I2S-Mic CLK
GPIO 17
GPIO 18 RFM95 SCK SPI_SCK
GPIO 19 RFM95 MISO SPI_MISO
GPIO 21 BME280 SDA I2C_SDA
GPIO 22 BME280 SCL I2C_SCL
GPIO 23 RFM95 MOSI SPI_MOSI
GPIO 25 RFM95 NSS / CS
GPIO 26 DS18B20 Data
GPIO 34 SIM800 TX ?? input only, connected with onboard 1 M / 1 M voltage divider to measure LiPo voltage (Funktion nutzen wir nicht, checken, ob der 1 M / 1 M Probleme bereitet, wenn kein LiPo direkt am Firebeetle angeschlossen ist)
GPIO 35 I2S-Mic SD ?? input only
GPIO 36 RFM95 DIO0 input only
GPIO 39 RFM95 DIO1 input only
EN RFM95 Reset

* Aus der Doku: It is recommended not to multiplex the pin IO0/D5, IO1/TXD and IO3/RX since they will be occupied when using USB-related function

Das ist vielleicht ein interessantes Detail, das in diesen Kontext passt: