While ordering components for a mini C64 project I’m doing with my friend Bigred, I ordered a cheap ST7789-v2 display.
I want to make a generic pico gadget with a display, buttons and sound. This to make a mini device for writing micropython demos.
The 3 tactical buttons are controlling the X,Y and Z axis of the rotating Cube.
Pinout:
PICO
DISPLAY
GP2
Tactical switch (other side to 3v3)
GP3
Tactical switch (other side to 3v3)
GP4
Tactical switch (other side to 3v3)
GP9
CS1
GND
GND
3v3
VCC
GP18
SCL (SPI clock)
GP19
SDA (MOSI / SPI Data)
GP20
RES (reset)
GP17
DC (data command)
GP16
BLK (backlight)
I know it says SCL/SDA (i2c) but it’s SPI controlled.
Used library : https://github.com/russhughes/st7789_mpy/tree/master
Some 3D explanation I drew a long time ago.
Using python you can use the Math funtions. (sin/cos) Note: these are in radians! print(math.sin(math.radians(30))) # 30 degrees
When using MachineCode you can use lookup tables. These are generated tables which hold precalculated sin data for every degree. You don’t have to use both cos and sin! (these are just 90 degrees shifted!)
Erik and I used a little basic program to generate an ASM include file like this
Costab LABEL BYTE
DB 0B4h,0B4h,0B4h,0B4h,0B4h,0B3h,0B3h,0B3h,0B2h,0B2h,0B1h,0B1h,0B0h,0AFh,0AFh
DB 0AEh
DB 0ADh,0ACh,0ABh,0AAh,0A9h,0A8h,0A7h,0A6h,0A5h,0A4h,0A2h,0A1h,0A0h,9Eh,9Dh,9Bh
DB 9Ah,98h,96h,95h,93h,91h,90h,8Eh,8Ch,8Ah,88h,86h,84h,82h,80h,7Eh
DB 7Ch,7Ah,78h,76h,74h,72h,70h,6Eh,6Ch,69h,67h,65h,63h,61h,5Eh,5Ch
DB 5Ah,58h,56h,53h,51h,4Fh,4Dh,4Bh,48h,46h,44h,42h,40h,3Eh,3Ch,3Ah
DB 38h,36h,34h,32h,30h,2Eh,2Ch,2Ah,28h,26h,24h,23h,21h,1Fh,1Eh,1Ch
DB 1Ah,19h,17h,16h,14h,13h,12h,10h,0Fh,0Eh,0Dh,0Ch,0Bh,0Ah,09h,08h
DB 07h,06h,05h,05h,04h,03h,03h,02h,02h,01h,01h,01h,00h,00h,00h,00h
DB 00h,00h,00h,00h,00h,01h,01h,01h,02h,02h,03h,03h,04h,05h,05h,06h
DB 07h,08h,09h,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh,10h,12h,13h,14h,16h,17h,19h
DB 1Ah,1Ch,1Eh,1Fh,21h,23h,24h,26h,28h,2Ah,2Ch,2Eh,30h,32h,34h,36h
DB 38h,3Ah,3Ch,3Eh,40h,42h,44h,46h,48h,4Bh,4Dh,4Fh,51h,53h,56h,58h
DB 5Ah,5Ch,5Eh,61h,63h,65h,67h,69h,6Ch,6Eh,70h,72h,74h,76h,78h,7Ah
DB 7Ch,7Eh,80h,82h,84h,86h,88h,8Ah,8Ch,8Eh,90h,91h,93h,95h,96h,98h
DB 9Ah,9Bh,9Dh,9Eh,0A0h,0A1h,0A2h,0A4h,0A5h,0A6h,0A7h,0A8h,0A9h,0AAh,0ABh,0ACh
DB 0ADh,0AEh,0AFh,0AFh,0B0h,0B1h,0B1h,0B2h,0B2h,0B3h,0B3h,0B3h,0B4h,0B4h,0B4h
CosTabE LABEL BYTE
Basic:
0 DEF SEG = &H7000: c = 0
1 pi = 3.14159265#
2 FOR x = 0 TO 2 * pi STEP 2 * pi / 256
3 d = COS(x) * 127 + 127
4 POKE c, d: c = c + 1: NEXT
Most i learned from a book called “Art of Graphics” (This is image of the book from the internet, i don’t think I still got my copy somewhere.
I started a little case for a collection of Raspberry devices.
Over the years, many Raspberries were designed and made. It all started in 2012 I want to have a case with all RP’s i’ve used.
There are many iterations of the RPi, I’m missing a lot now. If you want to help me, send me old/broken raspberries to get the collection complete!
This is the case at the moment
Case with some Raspberries and Arduino’s I found lying around, I’m not going to dismantle projects. Only the RPi 1A, 4B, Zero, Zero W, Pico and RPi 400 are displayed. Plastic sheet as protective layer still on there, should be clear as glass.
The case isn’t glued together yet. I’m not sure how and what to include.
Horizontal wooden bars to place the devices on?
Include a history of Arduino’s for now?
Put little notes in the case with information? Like my SDK-85 case?
So many things to try .. and probably buy. I’m lucky to have this already, official it’s not even out yet.
Specification
Processor : Broadcom BCM2712 2.4GHz quad-core 64-bit Arm Cortex-A76 CPU, B with cryptography extensions, 512KB per-core L2 caches, and a 2MB shared L3 cache
Features:
VideoCore VII GPU, supporting OpenGL ES 3.1, Vulkan 1.2
Dual 4Kp60 HDMI® display output with HDR support
4Kp60 HEVC decoder
LPDDR4X-4267 SDRAM (4GB and 8GB SKUs available at launch)
Dual-band 802.11ac Wi-Fi
Bluetooth 5.0 / Bluetooth Low Energy (BLE)
microSD card slot, with support for high-speed SDR104 mode
2 × USB 3.0 ports, supporting simultaneous 5Gbps operation
2 × USB 2.0 ports
Gigabit Ethernet, with PoE+ support (requires separate PoE+ HAT)
2 × 4-lane MIPI camera/display transceivers
PCIe 2.0 x1 interface for fast peripherals (requires separate M.2 HAT or other adapter)
5V/5A DC power via USB-C, with Power Delivery support
Raspberry Pi standard 40-pin header
Real-time clock (RTC), powered from external battery
Power button
Some things come to mind to test:
Kubernetes
Dual Camera OpenCV – depthmap and more
The offset between the normal camera and the Flir, is due to being to close to the object.After 5 minutes Wifi/Bluetooth bottom left heats up (didn’t use in this test)
You really want to use a case with an active blower to cool the rpi.
Busy day: I’ve airbrushed some 3D pieces a few days ago, but i need 50 or so more. Meanwhile is was reinstalling octoprint, and making a new version of my Bluetooth page flipper. (Android Music Sheet Pedal Thingy. Which i also didn’t post apparently) But the main project was this:
I was curious how fast the stepper motors are on my laser cutter. And for what can we utilize this!
So I took a Raspberry Zero and some rotary encoders, lets make an etch-a-sketch like thingy.
Some rotary encoder modules I had.
Next to do: 3D print a pen holder, and alter the code to enable the laser when moving!
CODE
Below code uses a simple rotary class, and generates control GCodes for the steppers/Sculpfun
import time
import serial
import RPi.GPIO as GPIO
from encoder import Encoder
def valueChanged(value, direction):
print("* New value: {}, Direction: {}".format(value, direction))
GPIO.setmode(GPIO.BCM)
e1 = Encoder(20, 21, valueChanged)
e2 = Encoder(16, 12, valueChanged)
x = 0
y = 0
arduino = serial.Serial('/dev/ttyUSB0', 115200, timeout=.1)
newx = 0
mystringx = ""
newy = 0
mystringy = ""
arduino.write(str.encode("G00 G17 G40 G21 G54\r\n"))
arduino.write(str.encode('G90\r\n'))
arduino.write(str.encode('M4\r\n'))
arduino.write(str.encode('M8\r\n'))
arduino.write(str.encode('G0 X41.5Y36.05\r\n'))
arduino.write(str.encode('M3\r\n'))
#arduino.write(str.encode('G91\r\n'))
arduino.write(str.encode('G1 X2.5F6000S0\r\n'))
arduino.write(str.encode('G1 X0\r\n'))
arduino.write(str.encode('G1 Y0\r\n'))
try:
while True:
data = arduino.readline()[:-2] #the last bit gets rid of the new-line chars
if data:
print (data)
arduino.write(str.encode("G1 F10000\r\n"))
newx=e1.getValue() *5 + 100
newy=e2.getValue() *5 + 100
mystringx=f"G1 X{newx}\r\n"
mystringy=f"G1 Y{newy}\r\n"
# print(mystringx)
arduino.write(str.encode(mystringx))
arduino.write(str.encode(mystringy))
except Exception:
pass
GPIO.cleanup()
I’ve got an old Speaker Phat, and a Raspberry Zero
An audio add-on board for Raspberry ( same size as the Zero )
Connections
My initial idea was to have the “High Voltage Sid Collection” (Downloaded the 55000 pack) On a mini device, battery operated and with a little keypad.
On the keypad i can select the Sidtune to play, or pressing A and a number the Sids from a certain artist.
The display gives you information about the tune being played. ( The display has an I2C hat to convert 8bits to I2C )
See pinout phat above. I’ve got three choices for I2C connection (green/blue to the Phat)
Direct connect and use different addresses
Use a I2C hub and different addresses
Define a secondary I2C on the raspberry
So I made the first test setup …
Underrun occurred .. So back to the drawingboard. I probably need a better Audio Hat. First to try .. Zero fast enough for sidplay2? Maybe audio over hdmi works??
I’ve had this Shelly sensor for a long time. But never posted anything about this. Last weekend we had a -situation- in our kitchen, so what better time to test this device again!
This little disc shaped device has three metal points on its bottom side, those are the flood (water) sensors. It stay’s in sleep mode when all’s good. It does several things when it detects water.
Emits a alarm signal
Wakes-up wifi
Sends a MQTT message (when not connected to the cloud like i have) MQTT is a alarm message AND it wil send the temperature of the device!
After a while (when dry) goes back to sleep
There are connection point on the print you can use .. happy hacking!
My node-red configuration
Above is the part where the mqtt messages gets processed by Node-Red Sending it to PushOver and my little MqttLcdNotifier
Above is the MqttLcdNotifer .. there are several parts to this
Top line is from shelly flood and other notifications
Text input puts text from the NR GUI on my TV and the LCDDisplay
same parts are being used by my 3D printer when the print tool is getting TO hot, or printing is finished
Trigger at work WAS a notification for work .. nonfunc
mqttlcd-button is the mqtt message send from the display (the one that i was pushing) to stop the beeping and clears the display
Bash notify, is as previously posted a flow which i can control from my linux machines notify “compiling complete” for example. This is also being broadcast from my livingroom using speakers. (See separate post about this)
Wellll, put this in place 2 years ago, never looked at it again .. still works
Volume is low, due to alarm sounds 🙂
"If something is worth doing, it's worth overdoing."