Of course I’ve not just been working on the pretty colours – I’ve revamped the control codes for the ESP8266-driven controller twice, discovered and fixed an OTA flaw in the code, re-hashed the Node-Red driving code, found and fixed countless other bits and pieces… and in the process taken pause for thought as to why I ever used the Dark Skies Node… you know – in other words – pretty much revamped everything just to improve a simple display.
Oh and I spotted an issue in Node-Red and upgraded to the latest version 0.17.4 which is wonderful.
PLEASE NOTE: If you wish to use the display module depicted above - make sure it is based on the s6d02a1 chip. Boards have the marking "1.8 TFT MODULE" on the bottom. The ones with a single connector (as against one on each side) generally do NOT use this chip and hence are not compatible).
Anyway, I figured some of you might find this interesting so here’s what I’ve been doing the last few days (apart from a trip to the coast and consuming too much alcohol on the odd evening).
Let’s get the important stuff out of the way – the hole in the box doesn’t do anything. Throwback to a previous project and it is waiting to be covered by one of those £1 Chinese back-lit touch-panels I mentioned a blog or two back.
So the box is just an Ebay job, I think it was £3 – sadly I can’t find them right now, lovely job with rounded corners and top/bottom vents. The display is one I call the QD-tech display, based on the 6sd02a1 controller and very cheap. 120x160 pixel LCD – see Ebay or AliExpress.
Glued to the back of this display is a Wemos D1 Mini from AliExpress, dirt cheap ESP-12 based board and they communicate via SPI – simplified to the minimum. I’ve connected resets together, CE to ground and so the only actual connections to the display are 5v and 3v3 (backlight) from the Wemos D1) and ground of course, for signals: clock, data, D/C. That’s it.
I use my well-developed kitchen-sink ESP8266 code for this and had to make some improvements on the way. As I was updating the board over and over and over, learning about the display chip, I noted memory issues occasionally when doing over the air updates – fixed that. I noted that I had no way to tell if the ESP8266 (and hence the display) had reset at any time (to know to do the init code) – fixed that (my ESP8266 code now sends a status message when rebooting). I got sick of the clumsy way I had to update the display, sending line, box, text commands so I amalgamated them all into string commands – and that was such a good idea I went back and made the code for other displays follow the same format. You can see how all of this might’ve taken up a lot of time.
Above you see the Node-Red code, running on a Raspberry Pi using my usual setup – there are in fact 2 displays – one on my desk and one in the hallway. I check for the ESP12s coming out of reset and send start-up code via MQTT to the displays separately. Overkill, could have just done the one. That includes setting up the display itself, clearing the screen and putting in that nice white framework of lines and rectangles. Meanwhile I have timed functions updating the time (once a second) and everything else once a minute. The weather forecast (see icons in a previous post) comes from Dark Sky and I was having difficulty getting what I wanted out of the Node for that service, when it occurred to me that was just as easy to do an HTTP request – as the HTTP node is able to capture information and convert it to a JSON object. How handy is that.
Above you see the setup to get the forecast… where it says 123 you would need your own (free) key and those are my longitude and latitude values straight from Google Maps. The function on the end – simply does this.. global.set("weather",msg.payload);
So now the global object “weather” contains everything I could ever need. See the info on their site – amazing amount of information. As a trivial example of how simple it is to get info from this – having stored the lot in an object called “weather” - to get the percentage chance of rain for the day I need nothing more than..
As I did not want to get barred for calling up information requests too rapidly, I separated off the weather request and now update that every 15 minutes.
You may notice a reference to England – this display is running in Spain but I have a Node-Red setup with sensors back in the UK so the two Node-Red installations exchange temperature/humidity and other info – so I figured I may as well show temperature and humidity from back in the UK.
I’ll not go into the entire code sent off to the display, as mentioned above I’ve very much simplified that now and it is all detailed in the manual I put together for home control.
And that’s it for now – as you can see on the display, it’s quite warm right now and so a bunch of us are off swimming for the day. No doubt I’ll come back full of new ideas.
Meanwhile I’ve been checking out the Khadas Vim board and the latest RF Bridge 433 from Itead – but more on this and more later.