touchGUI.py

My first commit to github, yay!

It’s a rudimentary GUI system, optimized for touchscreen use. Very lightweight and totally OOP (except for properties, zomg!). Plus, about every second line of the source is a comment, because it was written to support an educational project. The basic Idea is this: GUI System -> GUI Pages -> GUI Elements. No other documentation so far, although there’s a built-in numerical keypad –  which will also give you an idea of how to use the code.

Find it on https://github.com/niston/touchGUI

Here are some screenshots of an embedded project using touchGUI.py:

screenshots.png

 

Advertisements

IoT Blinkenlights!

Niston Cloud’s WiFi IoT Signaleer is -you guessed it- an Internet-of-Things signal lamp. It can visualize a great many things: Internet connection availability, NAGIOS alarms, home automation indicators, (3D) printer job status – you name it. My use case is to monitor the order queue of a webshop we run at work. So, the current Signaleer Firmware uses HTTP polling. I plan to write an MQTT version for some other use cases.

Niston Cloud's IoT Signaleer

Niston Cloud’s WiFi IoT Signaleer – The Internet-of-Things Blinkenlights

The heart of the IoT Signaleer consists of a nodeMCU board. This integrates an ESP8266 Microcontroller (has built-in WiFi), 4MB FLASH memory, a 3v3 regulator and an USB-TTL Serial bridge onto a tiny, ridiculously cheap board. Thanks to the nodeMCU firmware, the ESP can be programmed in LUA. I had some previous experience in writing LUA code, dating back to my World-of-Warcraft days. So, getting going with nodeMCU wasn’t much involving. I found that it’s event-driven approach is very similar to writing event-driven programms in (ancient) Visual Basic 6 – Which is something I once used to be extremely comfortable with.

Stripeboard PCB, Revision 1

Stripeboard PCB, Revision 1

The light stack used in this project has incadescent lamps. As you can see, I took to some rather very, totally and extremely beefy MOSFETS (IRFP064N) to blink ’em lights. Because, you know, Overkill! The MOSFETS do not fully turn on @ 3v3, so I used pairs of BC547 transistors as non-inverting gate drivers (thx SpeedEvil). Due to the relatively high MOSFET slew rate, I had to take some measures to prevent ringing (which would emit unwanted RFI) and so used a 100KOhm gate resistor. Filament protection is provided by a bunch of 470Ohm bias resistors across the MOSFETs, which pre-heat the bulb filaments with roughly 30mA each (thx Kludge & _abc_).

Incandescent Lamp Driver w/ Softstart Option

Incandescent Lamp Driver (1 Channel shown) w/ Softstart Option

To further extend bulb life, I implemented softstart on all lamp channels, paralleling a 4.7uF capacitance with each MOSFETs Gate. Going overkill++ on the MOSFETs allows for this mode of operation (slowly ramping down RDS) without using any heatsinking or even considering thermal management.  Considering thermal management: I had to rewire the beeper inside the lamp stack, for common anode operation. Doing so, it came to light that the manufacturer had put unsuitable wiring in place, rated for 105°C only. But I measured the inside of the stack to reach 103°C @ 24°C ambient. Thus, some new 180°C rated SiF wiring finally fixed this potential fire hazard. There’s also a little piezo beeper inside the lamp stack; it is driven by a single BC547.

MOSFET sofstart curve (5V,20ms / div)

MOSFET sofstart curve (Gate Voltage – 5V, 20ms / Div)

MOSFET shutdown curve (5V, 10us / Div)

MOSFET shutdown curve (Gate Voltage – 5V, 10us / Div)

I mostly used ESPlorer to code the Firmware, which you can obtain from here. ESPlorer is a tad bit cumbersome to use, and some of the features don’t work at all while others do work, but just not quite right. Still: It got the job done, nonetheless! I need to look around for a suitable dev environment though. Something VS-ish would be nice indeed.

Using ESPlorer as a *rudimentary* IDE.

Using ESPlorer as a *rudimentary* IDE.