README.md

Wed, 03 Jul 2024 20:01:31 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Wed, 03 Jul 2024 20:01:31 +0200
branch
idf 5.1
changeset 142
1f7069278fe7
parent 141
e117e7462096
permissions
-rw-r--r--

Version 0.4.2. Removed the components/websocket server and switched to the official http and websockets server. This server will also recover if the wifi connection disconnects and reconnects.

# BrewBoard op een ESP32 onder FreeRTOS.

Dit is een vervolg project van het BrewBoard op de Arduino Nano met de
MBSE-ArdRims software. Tot begin 2017 zijn deze kant en klare boards via
het forum hobbybrouwen.nl verspreid.

Het plan was om een upgrade kit te maken op basis van de WeMos chip die bijna
gelijk is aan de Arduino Nano maar ook WiFi heeft. In de praktijk bleek dat
niet zonder propblemen te werken, WiFi en brouwen tegelijk is teveel voor een
WeMos chip (ESP8266). Toen ongeveer op hetzelfde moment de markt overspoeld
werd door BrewMonks, EasyBrew en gelijke systemen was er ook geen behoefte
meer om hiermee verder te gaan.

Voor mezelf heb ik een nieuw board gemaakt (op experimenteerprint) wat even
groot is als het oorspronkelijk board wat ik gebruik, inclusief dezelfde 
plaats voor alle schroef aansluitingen. De bedoeling is dit board zo uit te
kunnen wisselen met het Arduino board. Op dit board wordt de Doit ESP32 Devkit
V1 gebruikt. Dit is een ESP32 development board met meer pinnen dan de meeste
boards. De meeste boards hebben 30 pennen, deze heeft er 36. En dat is precies
genoeg, de 30 pins boards hebben onvoldoende aansluitingen.

Als display wordt een 320x240 TFT touchscreen gebruikt wat aangesloten wordt
via een SPI bus. Op een tweede SPI bus zit een SD/MMC kaartslot wat aan de
voorzijde bereikbaar is. Dit slot wordt gebruikt om recepten in te voeren en
om log bestanden op te slaan. Alle overige aansluitingen op het ESP32 board
worden gebruikt voor de SSR's, relais en buzzer. 

In vergelijking met de Arduino Nano heeft de ESP32 de volgende hardware:

* 2 processors op 240 MHz,
* WiFi
* BlueTooth, maar wordt niet gebruikt.
* Timers en een Realtime Klok.
* 3 SPI bussen (voor het intern geheugen, de TFT en touchscreen en SD/MMC).
* OTA, Over The Air updates.
* Nog veel meer bussen die we niet gebruiken.

De software is FreeRTOS, dit is een mini embedded OS wat eenvoudig meerdere
taken tegelijk kan uitvoeren, dit maakt het programmeren van de brouw software
een stuk eenvoudiger als onder de Arduino programmeer opmgeving.

Een voorbeeld: de taak task_DS18B20 doet niets anders dan de twee bussen met
temperatuur sensoren uit te lezen en de gemeten temperaturen op te slaan zodat
andere taken die waardes kunnen gebruiken. Taken kunnen dus klein, simpel en
hopelijk vrij van bugs zijn.

Het hele systeem zit in elkaar door kleine taken die wel samen moeten werken
om tot een totale applicatie te komen.

Tot zover de achtergrond van dit project. Ik heb dit voor mezelf gemaakt omdat
het MBSE-ArdRims board wat leuke dingen niet kon. Omdat er geen markt is komt
er ook geen printje, maar het schema is wel beschikbaar. De software is ook
beschikbaar en kun je gewoon gebruiken. Dus wil je hiermee aan de gang, doe je
best, er is alleen geen enkele vorm van support. 

Nog even, ik wilde nog meer dingen toevoegen aan de software (MQTT) maar ook
een ESP32 heeft zijn beperkingen. Die liggen wel stukken verder dan de ESP8266
of Arduino Nano, maar ze zijn er. Het belangrijkste is toch het afhandelen van
het brouwproces.


#Links

Dit project gebruikt code van de volgende projecten. De meeste code bevat
enkele aanpassingen voor dit project en daarom zijn die projecten volledig
geimporteerd in brewboard. 

De PID library: http://playground.arduino.cc/Code/PIDLibrary by Brett
Beauregard.

De 1-wire bus: https://www.github.com/DavidAntliff/esp32-owb
De DS18B20 sensoren: https://www.github.com/DavidAntliff/esp32-ds18b20

7 Segments display font voor de web applicatie: http://www.keshikan.net
Deze is gemaakt door keshikan.

Het schema voor dit project is gemaakt in kicad en zit in de map kicad.
Belangrijk als je dit gaat bouwen: koop het juiste ESP32 devkit board. De
meeste boards hebben niet genoeg aansluitingen naar buiten, je hebt echt de
36 pens versie van Geekcreit® nodig.

Hetzelfde geld voor de TFT en Touch scherm. Deze wordt aangesloten op de
eerste vrije SPI bus, dat is SPI2 aka HSPI. Dus schermpjes met andere
bussen zoals I2C, I2S, parallel werken niet. Wil je die toch gebruiken,
dan zul je die zelf werkend moeten maken.


#ESP IDF.

Tot juni 2024 werd ESP-IDF versie 4.2 gebruikt om dit project te bouwen en de
image te flashen. Deze is al lange tijd niet makkelijk meer beschikbaar en
is nu versie 5.2.x de stabiele versie. De code was niet zondermeer om te zetten
naar deze versie. Op dit moment (juni 2024) gebruik ik versie 5.4-dev.
De IDF 4.2 versie is brewboard versie 0.3.25 en heeft release tag 'rel-0.3.25'.

Om over te gaan naar deze versie is het belangrijk om onder de oude IDF eerst een
update te doen naar die versie 0.3.25. Lees UPGRADE.md die in die versie zit.

De IDF versies tot en met 4.x.x waren nog flink in ontwikkeling en er waren heel
regelmatig API wijzigingen waardoor je niet makkelijk van versie kon wisselen.
Nu met versie 5.x is dit al veel stabieler en minder kritisch om een "verkeerde"
versie te gebruiken.

----------------------------------------------------------------------------------

HENDI:

HendiControl printje wat ontworpen is voor CraftbeerPi. Heeft twee signalen nodig:

  - On  - inschakelen regeling, schakelt de potmeter uit.
  - Pwr - PWM signaal. Maakt regelspannig 5 Volt is 100% en 0.8 Volt is 0%.

Het schema is aangepast om dit printje ook aan te kunnen sturen. In de equipment
setup kun je aangeven of deze gebruikt moet worden of de oude aan/uit methode.
GPIO0 wordt gebruikt om het PWM signaal te genereren.
Ook met een Hendi kan de HLT tegelijk gebruikt worden op 1 elektra groep.

Welke pin voor PWM output?
 - GPIO0. Mag niet naar 0 volt getrokken worden tijdens boot. Dus een PNP/NPN
   driver inverter. De pin mag wel naar 3V3 getrokken worden.

----------------------------------------------------------------------------------




TODO:
      - Nosleep js code toevoegen.

Voor kleinere image, van 10000272 -> 914944 de volgende settings:

diff -r 8d0287a1a9e1 sdkconfig
--- a/sdkconfig	Sun Jun 07 22:30:07 2020 +0200
+++ b/sdkconfig	Mon Jun 08 22:13:50 2020 +0200
@@ -85,8 +85,8 @@
 CONFIG_SSR_HLT_GPIO=33
 CONFIG_SSR_PUMP_GPIO=12
 CONFIG_BUZZER_GPIO=25
-CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y
-# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set
+# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set
+CONFIG_COMPILER_OPTIMIZATION_SIZE=y
 # CONFIG_COMPILER_OPTIMIZATION_PERF is not set
 # CONFIG_COMPILER_OPTIMIZATION_NONE is not set
 CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
@@ -340,7 +340,6 @@
 # CONFIG_FREERTOS_USE_TRACE_FACILITY is not set
 # CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set
 # CONFIG_FREERTOS_DEBUG_INTERNALS is not set
-CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y
 CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y
 # CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set
 # CONFIG_HEAP_POISONING_DISABLED is not set
@@ -583,8 +582,8 @@
 # CONFIG_MONITOR_BAUD_OTHER is not set
 CONFIG_MONITOR_BAUD_OTHER_VAL=115200
 CONFIG_MONITOR_BAUD=115200
-CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y
-# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set
+# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set
+CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
 CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y
 # CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set
 # CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set

mercurial