Here are a couple pictures of R2, the latest, greatest version. Compare it to R1 on the right.
The largest glaring difference, as I hinted at in the last log, is that I put a PIC microcontroller on there.
It has an open source USB stack, plenty of I/O, is mature, and I know how to use them very well.
The idea was to use it as the main processor, just handling simple wifi transactions with the ESP8266. Stretch goals would have the PIC programming the ESP8266, and maybe vice versa, too.
That single-handedly eliminates the CH340G USB-UART chip, the serial-parallel shift register for driving the parallel LCD, and the WDT/poor documentation headaches of the ESP8266.
After initial bringup, it's just been sitting on my bench, however. Staring at me. Since then, I've been collecting little snippets of Digikey part numbers, ideas, and technologies that will be incorporated into R3.
But for now, I think I will finish getting this up and going as desired. I previously wrote a quick LCD driver for a PIC dev board I have, so I'll transfer it over here, solder the LCD ribbon on, and write some image serialisation code between the two micros.
Perhaps R3 will use the ESP32? It solves a few of the problems neatly, and soon ESP-Mesh will be released.
Prototyping aw yeah.
There's a bunch of work I did for that last log that I didn't post. How uncharacteristic of me. The following was written on November 6th, 2016 and posted elsewhere:
After R1, there were some things that I was planning on changing for the next respin. R1 just to get some hardware in my hands and start writing code. This next one is all about the cleanup.
The last version of this project works... Poorly. The code in the test folder is stuff to help me prototype, before I got to a working model. Originally, I tried writing an LCD driver in Python for the Raspberry Pi GPIO, but the output seemed super unreliable. Instead of taking the time to troubleshoot why, it was faster to port that code onto a PIC dev board, which worked great.
Once I had a known-good LCD (using the shift register), I finished soldering up the rest of the board and tried to bring up the whole board. It never quite worked properly, and here's why!
When I was first drawing my schematic, the most common ESP8266 module was the ESP-12. Right around that time, November of 2015, the ESP-12E had just come out, with a bunch of extra pins. No one knew much about this at the time, but the conventional wisdom suggested that it was safe to include them in my design, allowing me to get away without using an additional microcontroller. Turns out these extra pins are associated with the flash memory, and using them willy nilly causes strange reset issues. Guess what kept happening when I was trying to test my fully populated board?
So before a complete rethink was in the cards, here was the original plan for revision 2:
Some of these ended up making it in, but the new system design deprecated other points. So what's new in R2? Stay tuned to find out!
Obviously I've got a little catch up to do in documentation.
I have a serious LCD-buying problem. If I see a new inexpensive LCD on AliExpress, I tend to snap it up. They very rarely have good documentation, or any information at all.
Most of them don't even have part numbers.
After researching part numbers written on the LCDs (but nowhere in the original seller's page), it usually seems to first come up in Russian-language forums. They have a good history of finding old half-finished datasheets that have "PRELIMINARY" and "INTERNAL USE ONLY" written all over them. Very handy.
So here's the schematic I did for "Revision 1". That's the version that got made.
It's pretty simple. USB connector, linear 3.3v regulator, a cheap Chinese CH340G USB-UART bridge, ESP-12E module, and a serial-parallel shift register.
The UART bridge programs the ESP8266, the shift register is to handle the parallel inputs of the LCD module itself.
There are definitely some things I don't like about it already, but that's what a prototype is for!
I'll detail some of them in the next log.