Skip to main content

ESP GPIO pins...

The ESP8266 can easily be programmed with the Arduino IDE and the main benefit using it, is the WiFi interface that reduces your communication wiring to zero.

A $5 Raspberry Pi Zero W with a $5 micro SD Card becomes your Access Point, DHCP Server, Gateway to the Internet, and will also run applications like JMRI and MQTT.

But, now that you have a well connected $3 ESP-xx device, what pins are available to do what? We are not counting the Rx and Tx pins, you could reassign those for your own purpose, but the boot loader is going to talk at startup and updating your firmware might need these pins, so think ahead.

There is some information here, but when you are writing the "Arduino" code for the ESP8266, you need a little more guidance...

The ESP-01 has 2 GPIO pins, so you can do a 3 color signal, 2 relays, 2 digital sensors, or use them for i2c to a port expander and the rest is easy.

The ESP-05 has none, only the RST, RXD and TXD pins...good WiFi shield, if you have a UART on your side.

The ESP-WROOM-02 seems to have 8 or 9 useful GPIO pins (depending if IO16 is used for the deep sleep).

The ESP-WROOM-32 has about 23  useful GPIO pins (and 16 ADC pins, 2 DACs, 10 touch inputs). Expect to see a lot more about this ESP32!

The ESP-12 has 11 GPIO pins, with one ADC capable.

So on to the reason for this post, what are the pin numbers to use, if you do have 11 GPIOs, so first the code that printed these numbers to see where D0 through D10 might lead:
void setup( ) {
  Serial.begin( 115200 );
  delay( 10 );

  String printPinStr;
  printPinStr += String(D0);  printPinStr += ",";
  printPinStr += String(D1);  printPinStr += ",";
  printPinStr += String(D2);  printPinStr += ",";
  printPinStr += String(D3);  printPinStr += ",";
  printPinStr += String(D4);  printPinStr += ",";
  printPinStr += String(D5);  printPinStr += ",";
  printPinStr += String(D6);  printPinStr += ",";
  printPinStr += String(D7);  printPinStr += ",";
  printPinStr += String(D8);  printPinStr += ",";
  printPinStr += String(D9);  printPinStr += ",";
  printPinStr += String(D10); //  printPinStr += ",";
  //printPinStr += String(D12);  // ...:44: error: 
  // 'D12' was not declared in this scope
  printPinStr += ";";
  Serial.println( printPinStr ); 
} // setup( )
And the result:
And this tells that D0 is connected to GPIO16 and D1 is connected to GPIO05.

More to come shortly!

For some comparisons, take a look at the bottom of this Edwin Robotics page.


Popular posts from this blog

Signal Masts in JMRI 4.14, for beginners...

Here are all the notes and files from the Plano Train Show Clinic. You need to have an internal sensor ( IMCOMPORT ) with the port in the value like COM10 or /dev/ttyUSB0 , whatever Device Manager (or /dev/ttyUSBx) shows for the connected Arduino. If you have Panels -> Script Output open, you will see the message:  !!! Please add IMCOMPORT with the port in the value!!! The basic idea here is to use the Comment in the Signal Head field to define the position of the Pixel in the string commented to the Arduino, as well as the RGB colors to show for Clear, Approach and Stop (00:00 FF 00: BBAA 00: FF 0000). With all the Heads in the Table, run the python script and now you can update the colors in the Comment "live", keeping in mind that a message is only sent when a Head changes color. We then put the Heads in Masts and use the Signal Mast Logic to do the magic. I like the original Panel Editor more and it works fine as long as you keep using Mast pairs, which require

The One Pin Signal System, using an Arduino

The One (RRRduino) Pin Signal System! Part I NeoPixels: Yes, you read that right, you can control a whole signal system with up to 200 lights by using a single Arduino pin. And this was not my idea, all the credit and the patent goes to my friend Tom, but since I already had something using the same technology up and running using only a Nano, I do not feel too bad telling you about it. Short video first! There is a tiny 8 pin chip out there called a WS2811 which is a three channel LED driver, and you might find them on the interweb as NeoPixel LED Driver Chips. They need power and ground, typically 5 Vdc, and data to be put in the three registers inside the chip, one for each LEDs it can control. So, in most cases out there today, the LEDs connected are Red, Green and Blue (RGB for short) and by setting the three registers each with an 8 bit value (which in English means a value from 0 to 255, since 2 8 = 256, but since 0 is an acceptable value too, the maximum is 2 8 - 1

Not RRRduino, unless you have an MQTT connection via Ethernet or WiFi

JMRI code to connect to an MQTT broker, to publish and subscribe to the messages for signal masts. Of course, we agree to a standard for the MQTT topics, and since you were not here, we settled on "mast.xxxx" where xxxx is a number starting at zero. This MQTT topic is used as the User Name in a JMRI signal mast. Created as a Virtual Mast with the Aspect used as the payload in the message. And, yes, the device under the real mast needs to be programmed with the same name and code for each of the "aspect" payloads to be implemented. A yellow and red LED'd dwarf signal can not do a "Clear" aspect, so make sure "Clear" is maybe set to yellow for "Approach" as well.    Virtual Masts with agreed upon User Names. Comments are for the One Wire Signals on the NeoPixel string (see prior post)   Virtual Mast The Jython (or Python) code shown here below, is to attach a Listener to each Signal Mast, and to publish a message