This is a Non-Cloud solution like Alexa and Google devices. I only could play with it for a few minutes because I was working on Arduino code with an ILI9341 Display and a BME280 (Temperature/Humidity/Air pressure).
Today I got some new goodies in, one of these is a LilyGO LoRa display which works on 433 Mhz.
I flashed OpenMQTTGateway on this device.
In the past, I posted about the RFCOM Gateway using Domoticz. This runs on a Raspberry Pi. While looking for alternatives, I found a rtl-sdr solution.
While working on a client project, I tested multiple displays.
ILI9341
1.3inch SPI TFT LCD Display RGB (ST7789)
Waveshare 4.2 Epaper with ESP32 Controller
I thought it was fun to connect the Epaper to ESPHome.
This probably ends up being a Quote displayer
Universal e-Paper Driver Board with WiFi / Bluetooth SoC ESP32 onboard, supports various Waveshare SPI e-Paper raw panels
It was not without problems. For example, the ESPHome editor gave squiggly lines under type. This has to be changed in the libraries. (Already notified developers)
model: 4.20in-V2 does not work .. use model: 4.20in-v2
After a long time, another post! We have been to 4 states on the west coast of America for almost 4 weeks, after that a pneumonia kept me from doing stuff.
Slowly, I started finishing my Workshop/Lab for my new business. So I didn’t have many things to post about. So now I’ll post something about this Home Assistant solution, because there was not a decent post to be found about this solution.
Some history: A long time ago I made a 4 button 4 led controller with my friend Duncan. At that time we were using Domoticz, and used a NodeMcu with ESP Easy to read the button states and made the leds act as status lights.
This is made using a NodeMCU (8266) but ESP32, Wemos, whatever will work also. We wanted to repurpose the old NodeMCU, instead of building a new one.
So Migrating to Home Assistant: How to install ESPHome is easy to find on the internet.
Below is an example for 4 push buttons which TOGGLE a Home Assistant entity. And the LEDs will give a feedback of the state of an entity.
Note: There is 1 out of 4 configured like that. The other ones are generic. One button toggles my shelly lab ledlight, and lights up a led when toggled!
My C64 had a problem with previous attached speaker. It drew too much current to drive. And random characters where printed. Choosing another speaker and a minimal amplifier solved the issue. (Thanks to Bigred finding the problem at Bornhack 2024)
Today I made a Linux version of Tyrone’s QuickPath tool.
My friend Tyrone came up with a great idea.
A directory switching tool, to move around in often used directories. You can use a keyword to move around. These keywords are configured in a config file. Even starting Total Commander with preset directories. Work/Private/Programming environments. His version uses PowerShell, but he wanted a multiplatform version, so we have chosen to use Python on both environments.
My version uses Python and Bash. (Bash is used for a change directory workaround on Linux and bash completion.)
Source will be in Tyrone’s git when finished.
Options:
qp – lists config items with number and short key
qp 1 or qp c64demo – changes directory to below example
qp add c64demo /data/store/git/projects/c64code2024 – add a entry
qp del 1 – removes entry
qp mc tmp c64demo – starts midnight commander with left and right directories
Tomorrow some laser cutting, so let’s design some things to cut.
Jigsaw test – using engraving and cutting
Make a front for my bus manipulator
Make some cases for the game controllers (These are beta, and will be 3D printed at a later stage. My old 3D printer is slow)
Saw a cool game a while ago, and found some old code. There was no schematic, so I had to reverse engineer it using the Arduino code. This one uses a Micro Pro.
Build a working version, now I can use this as base to create other games. But first i’m going to rebuild it so it can use Wifi and uses a Lipo Battery. Making it usable without wires.
Rotary – set angle/speed (Press resets)
Blue – toggle angle or speed ( was rotary press )
Green – select digit to change
Red – Fire
Led – not completely working yet, shows color of player Wil be changed to addressable leds with more functions (Player color, energy warning and more)
Last week I bought an old Bornhack Badge. I thought it needed a display.
Using a SSD1306 display, and Circuitpython I made this.
( Wooded thingy contains an RFID chip ( Part of my player ))
Library and files needed:
font5x8.bin in root of filesystem ( just google for this file )
copy of adafruit_framebuf.mpy in /lib
copy of adafruit_ssd1306.mpy in /lib
Code: (midway some pixel examples, just uncomment)
import board
from time import sleep
import busio
from PN7150 import PN7150
import adafruit_ssd1306
import math
import adafruit_framebuf
if True:
# Fast 400KHz I2C
i2c = busio.I2C(board.SCL, board.SDA, frequency = 400000)
else:
# Regular 100kHz I2C
i2c = board.I2C()
WIDTH = 32
HEIGHT = 8
buffer = bytearray(round(WIDTH * math.ceil(HEIGHT / 8)))
fb = adafruit_framebuf.FrameBuffer(
buffer, WIDTH, HEIGHT, buf_format=adafruit_framebuf.MVLSB
)
nfc = PN7150(i2c, board.IRQ, board.VEN)
display = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c,addr=0x3c)
assert nfc.connect()
print("Connected.")
assert nfc.modeRW()
print("Switched to read/write mode.")
display.fill(0)
display.show()
#display.fill(0)
#display.text('Hello', 0, 0, 1 )
#display.text('World', 0, 10, 1)
#display.show()
# Set a pixel in the origin 0,0 position.
#display.pixel(0, 0, 1)
# Set a pixel in the middle 64, 16 position.
#display.pixel(64, 16, 1)
# Set a pixel in the opposite 127, 31 position.
#display.pixel(127, 31, 1)
#display.show()
while True:
display.fill(0)
display.text('Waiting for card', 0, 0, 1 )
display.show()
assert nfc.startDiscoveryRW()
print("Waiting for card..")
card = nfc.waitForCard()
assert nfc.stopDiscovery()
print("ID: {}".format(card.nfcid1()))
id = card.nfcid1()
display.text(id, 0, 10, 1 )
display.show()
sleep(0.5)
Not sure about display i2c address? Use below code
import time
import board
import busio
# List of potential I2C busses
ALL_I2C = ("board.I2C()",)
# Determine which busses are valid
found_i2c = []
for name in ALL_I2C:
try:
print("Checking {}...".format(name), end="")
bus = eval(name)
bus.unlock()
found_i2c.append((name, bus))
print("ADDED.")
except Exception as e:
print("SKIPPED:", e)
# Scan valid busses
if len(found_i2c):
print("-" * 40)
print("I2C SCAN")
print("-" * 40)
while True:
for bus_info in found_i2c:
name = bus_info[0]
bus = bus_info[1]
while not bus.try_lock():
pass
print(
name,
"addresses found:",
[hex(device_address) for device_address in bus.scan()],
)
bus.unlock()
time.sleep(2)
else:
print("No valid I2C bus found.")
"If something is worth doing, it's worth overdoing."