SMA Solar readout - part 1 Oct 11, 2017
This is the first post of a 3-part series about reading out an SMA solar inverter over Bluetooth and displaying some readings every few seconds. Long-time readers may remember the Solar at last weblog post from several years ago and the SMA Relay, based on a JeeNode v6. The Bluetooth readout code was derived from Stuart Pittaway’s Nanode SMA PV Monitor code.
This project is for a friend who’s birthday is coming up shortly, and who has the same SMA 5000TL inverter as I do - although it can probably be used with other models.
Here is the gadget, powered off 5V USB:
There’s no RF relay in this unit, although I may build a second one for use at JeeLabs, with an RFM69 instead of the LCD.
There are many sides to this project, i.e.
- µC choice: I’ll be using a low-cost STM32F103 board from AliExpress
- 2x16 character LCD, which is a bit old-school, but hey, it works…
- Bluetooth: I’ve selected a simple “HC05” unit, from eBay
- actual hardware connections
- talking to BT via the 2nd UART
- packet protocol encoding/decoding
- setting up permanent BT pairing
- formatted number display
- enabling the hardware watchdog
- automatic start on power-up
- a 3D-printed enclosure
The STM32F103C8 board in this unit is this one, but a Blue Pill would work just as well:
There’s a micro-USB socket on the bottom, but it can only be used for power (doh!) - the USB pins do not seem to be connected. So a USB-to-serial adapter will have to be used during development - no big deal.
The communication over Bluetooth uses the Serial Port Profile (SPP), but there’s a fairly obnoxious packet format on top, which needs to be generated before sending and decoded upon reception.
Here’s the basic packet structure:
The trick is to send out just the packets needed to obtain the desired readings, without getting into what those packet details mean. Luckily, all the hard work has been done years ago, for the SMA Relay.
Since I’ll be using an STM32 with Mecrisp, the main task on the software side will be to port the code over to Forth and to add some basic stuff, e.g. output to the LCD display.
Speaking of which: the LCD driver is very simple, just three dozen lines of Forth code.
Next week: hardware and software details!