Commercial LED Sign With RS232 Port Accessible Over Wi-Fi

by Barkfin in Circuits > Wireless

1505 Views, 9 Favorites, 0 Comments

Commercial LED Sign With RS232 Port Accessible Over Wi-Fi

image0.jpeg

The LED sign I found is a Pro-Lite PL-M2014R consisting of 16 characters, each sized 5 pixels wide by 7 pixels high, for a total display field of 80 pixels wide by 7 pixels high (physical measurements 24" wide by 2" high, multicolor).

I got this for $10 from a local electronics recycler outfit! They originally wanted $40 except they didn't have any of the accessories: no power supply, no remote control, no communication cable, no instruction manual. It was in unknown operating condition, but I bought it for the fun of it; also it supposedly has a Z80 microprocessor, which is also present in my Commodore 128 (and which I have never ever made any use of!)

Supplies

  • Pro-Lite PL-M2014R second-hand LED sign
  • 9V AC/DC power adapter of at least 2.5A with 5.5mm / 2.1mm barrel connector, centre negative terminal
  • ESP-12 Wi-Fi module(I paid about $3.50)
  • 4-pin RS232 breakout module(worth about $3.00)
  • 4-conductor RJ14 telephone cable (2-conductor won't work)

Check If the Sign Works First

image6.jpeg
image5.jpeg
image4.jpeg

The sticker on the back says this sign needs 9V AC at 30W (and I've seen other photos that say 31W).

The power is Volts times Amps, so the amperage required would be 30W ÷ 9V = 3.33A, or really 3.5A.

However even on the Pro-Lite webpage they only offer 9V AC adapters at 2.5 A, which is the only power adapter these signs ever came with. 9V times 2.5A is a power capacity of 22.5W. I have no idea why the discrepancy between what the power adapter can deliver and the requirement mentioned on the sticker.

However: if you look on the barrel jack connector of the sign, it is also molded "DC-IN". Can this sign also work on DC? Because I don't have an AC power adapter.

So I set up my 2.5A adjustable DC power supply to 9.06V (close enough) and plugged it in. The sign lit up!

If the sign works then it's worthwhile to proceed.

Build the ESP-link Interface

image3.jpeg
wiring assignment.png
esp-link setup1.png
esp-link setup2.png

First thing, note the orientation of the wires in your 4-conductor RJ14 telephone cable. Mine are (from top): black; red; green; and yellow.

Anyway that's not really important: the top and bottom ones are ground, and the middle two are RX and TX.

Referring to image 2, the "Wiring Assignments for Series II" from the Pro-Lite manual: based on the fact that the locking tang is on the back of my phone plug I think this means the black wire is the lower ground; red is the RX; green is the TX; and yellow is the upper ground. (You'd think that's what that means. I think these might be backwards, according to the actual connections I made that actually worked. Whatever! If at first your connection doesn't work, try swapping the RX and TX.)

Also note the difference between RJ12 and RJ14. The diagram from the manual mentions "RJ12" which is the 6 conductor phone connector, however you'll clearly see the Pro-Lite sign only uses the middle 4 conductors. That's why the RJ14 cord works just fine.

Ok after that, we need to install Jeelabs ESP-link firmware on the ESP-12 module. I wound up using ESP-link version 3.0.14 because evidently, as of June 2021, the more recent release has some kind of bug or instability. Pick that up here.

The instructions to flash the firmware are here.

The flashing isn't conceptually difficult, but it seems there is a lot of material to read through. The main complication is you need to install Python and then you need to install esptool.py. You might possibly also need the Arduino IDE/flashing utility, which I only used to find out which COM port had been assigned to the ESP-12 module (mine was COM3).

The final command to flash the firmware is of this form:

python "../esptool/esptool.py" --port COM3 --baud 115200 write_flash --flash_freq 80m --flash_mode qio --flash_size 32m 0x0000 boot_v1.6.bin 0x1000 user1.bin 0x3FC000 esp_init_data_default.bin 0x3FE000 blank.bin

(but the exact specifics depend on which folder you have python in, where you have placed esptool.py and the esp-link firmware, and which COM port is assigned for your ESP-12 module.)

ONCE you have ESP-link running on the module, you need to log into it using your cell phone (and it'll first run in "AP" or "Access Point" mode). You'll have to browse wi-fi routers and you'll find it listed with SSID "ESP-xxxxxxxx" (something like that, which is the ESP plus its Mac Address). You'll connect with no Wi-Fi password or security of any kind. Then with your browser access the ESP-link configuration page:

http://192.168.4.1/

Using the web interface configure the module to log into your own Wi-Fi router, so you'll have to get your Wi-Fi router password ready for that. Then re-boot the ESP module and find out what IP address it got via DHCP, then log into it again over your own Wi-Fi network.

The first thing I did was to assign the ESP-12 module a static IP address, then re-booted it again, then directed my browser to that static IP address.

LASTLY... in the "Home" menu (chosen from the left-side of the browser page), you'll select Pin Assignment Preset "esp-12 swap".

This preset will consist of these specific settings:

  • Reset (gpio1/TX0)
  • ISP/Flash (gpio3/RX0)
  • Conn LED (gpio0)
  • Serial LED (gpio2/TX1)
  • UART pins (swapped)
  • RX pull-up (checked)

Add the RS232 Breakout Module

rs232 breakout.jpg
image1.jpeg
image2.jpeg
esp12 pinout.jpg
db9-pinout.jpg
image7.jpeg

The ESP-12 module does indeed communicate via UART, however this is implemented at "TTL" voltage levels.

The TTL voltage levels are inadequate to communicate with an RS232 device such as the LED sign.

So that's why the RS232 breakout board: this serves to amplify the signals so that the sign can recognize the information.

The connection is dead-simple and here I've done it with a breadboard.

The RS232 breakout module uses 4 pin connections: VCC; TX; RX; and GND.

What you need to do is jumper (from ESP-12 module to RS232 breakout module):

  • 3.3V to VCC
  • GND to GND
  • GPIO15 to RX
  • GPIO13 to TX

Now as for the connection to the telephone cable, there are only 3 connections:

  • Either yellow or black, connect to DB9 pin #5 (Ground)
  • Green wire (sign TX), connects to DB9 pin #3 (TXD)
  • Red wire (sign RX), connects to DB9 pin #2 (RXD)

Excuse my crappy soldering job! I don't have the male DB9 connector yet, it's coming in the mail. Meanwhile this is good enough to confirm the communication.

Communicate With the Sign!

esp-link setup3.png
putty.png
putty2.png
response.png

So using your web browser, log back in to the ESP-12 module and select "μC Console" (micro controller console) on the left side of the web page. For communications you'll want to set baud to 9600 and format "Fmt" to 8N1. Make sure to add CR and LF (bottom-right corner of the Console window).

Then press Enter in the Console Entry line a couple times, then issue to the sign the command "< ID01 >".

If all goes well, you will be answered "< ID01 >S".

You have to do whatever troubleshooting necessary to all the previous work until you get from the sign that answer, because until that happens you still are not communicating with the sign.

This "μC Console" is good enough to program the sign with, but you might consider a couple follow-up steps.

One is PuTTY for Windows, another is com0com (to assign the sign a virtual COM port). (Note: I don't know how "com0com" actually works, I only mention it for the sake of completeness. I read somewhere else you would use this to create the virtual com port that you could then use with your own custom program, if you wanted to go that far.)

I simply downloaded 64-bit PuTTY for Windows and ran it, then set up a telnet connection (port 23) to the static IP address I had assigned to the ESP-12 module.

Telnet is essentially a terminal emulation, and you can't really tell what are the commands issued and the responses received, but here I will explain what communication occurred on the black screen.

First thing I sent the sign a single Enter (blank line) then issued it "< ID01 >". The sign responded "< ID01 >S", which is it's standard response. "< ID01 >" is the identification code for the sign, and the code "S" indicates "successful transmission". Other possibilities are "E" (error) or "F" (buffer full).

Lastly, I sent to the sign this command:

< ID01 > < PA > < FQ > < SD > < CB >C < CE >O < CL >L < CD >O < CG >R

< ID01 > < PA > - This tells the sign with identification code "01" to wake up and to reprogram page "A" with the following contents:

< FQ > - "Appear" (with no animation effect)

< SD > - "Bold Italic" (bold means 2x width)

< CB >C - "Red" and the letter "C"

< CE >O - "Bright Orange" and the letter "O"

< CL >L - "Bright Green" and the letter "L"

< CD >O - "Orange" and the letter "O"

< CG >R - "Yellow" and the letter "R"

This spells "COLOR"!

Lastly, there are all kinds of programming resources for the sign published all over the internet. Frankly, I've found them universally disappointing: don't waste your time. Instead, here are the simple protocols as published by Pro-Lite themselves, depending on what version your ROM is. As you might have seen, on the foil sticker on the back of my sign is the V6 sticker, indicating version 6 rom. You may have an earlier V5 rom or the later V8 rom. Whichever one you've got, here are copies of the protocol guides from Pro-Lite. Just follow the protocol document that Pro-Lite themselves published, don't pay any attention to the opinions and faulty information other people published on the internet.