Input only-pins am ESP32 nutzen? Für welche Protokolle / Module

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, also 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!

Beim HX711 haben wir DT als input, allerdings mit INPUT_PULLUP, die "input only pins" beim ESP haben aber keine internal pull-ups.

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 Data. Ich staune gerade über den I²S – Wikipedia 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 Data aber nicht bidirektional ist, könnten wir einen input only pin für I2S Data 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 ESP32 Pinout Reference: Which GPIO pins should you use? | Random Nerd Tutorials :


Siehe auch Strapping Pins explanation - ESP32 Forum

Doch einen von denen noch nutzen?

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

das schaut jetzt nicht so viel aus. Mach dir eine EXAKTE Liste mit allen Pins und ordne sie deinen Modulen zu. Dann kann man drüber schauen.

Mit 10 kΩ extern nach 3,3 V hast Du PullUp, ist kein großer Aufwand :slightly_smiling_face:

Gute Idee Werner / @noiasca mal eine Tabelle zu machen, dann hat man das etwas übersichtlicher als nur bei Fritzing, ja @agmue und den externen pullup könnte ich für DT-HX711 zur Not verbauen.

Hier das Pinout des Firebeetle 2 den ich wegen der guten deep sleep-Werte verwenden möchte:

... 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

Wenn du die onboard LED nicht brauchst, kannste den Pin auch für etwas anderes verwenden.

GPIO02 hat aber wieder Auswirkungen auf den Bootvorgang, also auch nicht ganz beschwerdefrei.

@Clemens
Da hätte ich mein ESP32 Cheat-Sheet

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.