Merge branch '0.1.0-fsmc' of https://github.com/arovak/hasp-lvgl into 0.1.0-fsmc

This commit is contained in:
fvanroie 2020-05-28 15:08:52 +02:00
commit 15380386bc
6 changed files with 258 additions and 9 deletions

View File

@ -158,6 +158,11 @@
#include "hasp_ethernet.h"
#endif
#if HASP_USE_WIFI > 0 && defined(STM32F4xx)
#include "WiFiSpi.h"
static WiFiSpiClass WiFi;
#endif
#ifndef FPSTR
#define FPSTR(pstr_pointer) (reinterpret_cast<const __FlashStringHelper *>(pstr_pointer))
#endif

View File

@ -51,6 +51,12 @@ char httpPassword[32] = "";
EthernetWebServer webServer(80);
#endif
#if defined(STM32F4xx) && HASP_USE_WIFI>0
#include <EthernetWebServer_STM32.h>
// #include <WiFi.h>
EthernetWebServer webServer(80);
#endif
#if defined(ARDUINO_ARCH_ESP8266)
#include <ESP8266WebServer.h>
ESP8266WebServer webServer(80);
@ -479,7 +485,18 @@ void webHandleInfo()
} else {
httpMessage += F("Very Bad)");
}
#if defined(STM32F4xx)
byte mac[6];
WiFi.macAddress(mac);
char macAddress[16];
sprintf_P(macAddress, PSTR("%02x%02x%02x"), mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
httpMessage += F("</br><b>IP Address: </b>");
httpMessage += String(WiFi.localIP());
httpMessage += F("</br><b>Gateway: </b>");
httpMessage += String(WiFi.gatewayIP());
httpMessage += F("</br><b>MAC Address: </b>");
httpMessage += String(macAddress);
#else
httpMessage += F("</br><b>IP Address: </b>");
httpMessage += String(WiFi.localIP().toString());
httpMessage += F("</br><b>Gateway: </b>");
@ -489,6 +506,7 @@ void webHandleInfo()
httpMessage += F("</br><b>MAC Address: </b>");
httpMessage += String(WiFi.macAddress());
#endif
#endif
/* Mqtt Stats */
#if HASP_USE_MQTT > 0
@ -901,7 +919,7 @@ void webHandleConfig()
}
// Reboot after saving wifi config in AP mode
#if HASP_USE_WIFI > 0
#if HASP_USE_WIFI > 0 && !defined(STM32F4xx)
if(WiFi.getMode() != WIFI_STA) {
httpHandleReboot();
}
@ -1105,7 +1123,7 @@ void webHandleWifiConfig()
}
httpMessage += F("'><p><button type='submit' name='save' value='wifi'>Save Settings</button></p></form>");
#if HASP_USE_WIFI > 0
#if HASP_USE_WIFI > 0 && !defined(STM32F4xx)
if(WiFi.getMode() == WIFI_STA) {
httpMessage +=
PSTR("<p><form method='get' action='/config'><button type='submit'>Configuration</button></form></p>");
@ -1114,7 +1132,11 @@ void webHandleWifiConfig()
webSendPage(httpGetNodename(), httpMessage.length(), false);
webServer.sendContent(httpMessage);
#if defined(STM32F4xx)
httpMessage = "";
#else
httpMessage.clear();
#endif
webSendFooter();
}
#endif
@ -1572,8 +1594,14 @@ void webStart()
webServer.begin();
webServerStarted = true;
#if HASP_USE_WIFI > 0
#if defined(STM32F4xx)
IPAddress ip;
ip = WiFi.localIP();
Log.notice(F("HTTP: Server started @ http://%d.%d.%d.%d"), ip[0], ip[1], ip[2], ip[3]);
#else
Log.notice(F("HTTP: Server started @ http://%s"),
(WiFi.getMode() != WIFI_STA ? WiFi.softAPIP().toString().c_str() : WiFi.localIP().toString().c_str()));
#endif
#else
IPAddress ip;
ip = Ethernet.localIP();
@ -1594,10 +1622,12 @@ void httpSetup()
// httpSetConfig(settings);
#if HASP_USE_WIFI > 0
#if !defined(STM32F4xx)
if(WiFi.getMode() != WIFI_STA) {
Log.notice(F("HTTP: Wifi access point"));
webServer.on(F("/"), webHandleWifiConfig);
} else {
#endif
#endif
webServer.on(F("/page/"), []() {
@ -1679,7 +1709,9 @@ void httpSetup()
webServer.on(F("/reboot"), httpHandleReboot);
webServer.onNotFound(httpHandleNotFound);
#if HASP_USE_WIFI > 0
#if !defined(STM32F4xx)
}
#endif
#endif
// Shared pages
@ -1704,7 +1736,7 @@ void httpReconnect()
if(webServerStarted) {
webStop();
} else
#if HASP_USE_WIFI > 0
#if HASP_USE_WIFI > 0 && !defined(STM32F4xx)
if(WiFi.status() == WL_CONNECTED || WiFi.getMode() != WIFI_STA)
#endif
{

View File

@ -18,7 +18,10 @@ WiFiClient mqttNetworkClient;
#include <ESP.h>
WiFiClient mqttNetworkClient;
#else
#if defined(STM32F4xx) && HASP_USE_WIFI>0
// #include <WiFi.h>
WiFiSpiClient mqttNetworkClient;
#else
#if defined(W5500_MOSI) && defined(W5500_MISO) && defined(W5500_SCLK)
#define W5500_LAN
#include <Ethernet.h>
@ -28,6 +31,7 @@ WiFiClient mqttNetworkClient;
EthernetClient mqttNetworkClient;
#endif
#endif
#include "hasp_hal.h"
#include "hasp_tft.h"
@ -190,9 +194,18 @@ void mqtt_send_statusupdate()
snprintf_P(data, sizeof(data), PSTR("{\"status\":\"available\",\"version\":\"%s\",\"uptime\":%lu,"),
haspGetVersion().c_str(), long(millis() / 1000));
strcat(buffer, data);
#if HASP_USE_WIFI > 0
#if HASP_USE_WIFI>0
#if defined(STM32F4xx)
IPAddress ip;
ip = WiFi.localIP();
char espIp[16];
memset(espIp, 0 ,sizeof(espIp));
snprintf_P(buffer, sizeof(buffer), PSTR("\"ssid\":\"%s\",\"rssi\":%i,\"ip\":\"%d.%d.%d.%d\","), WiFi.SSID(),
WiFi.RSSI(), ip[0], ip[1], ip[2], ip[3]);
#else
snprintf_P(buffer, sizeof(buffer), PSTR("\"ssid\":\"%s\",\"rssi\":%i,\"ip\":\"%s\","), WiFi.SSID().c_str(),
WiFi.RSSI(), WiFi.localIP().toString().c_str());
#endif
strcat(data, buffer);
#endif
snprintf_P(buffer, sizeof(buffer), PSTR("\"heapFree\":%u,\"heapFrag\":%u,\"espCore\":\"%s\","),

View File

@ -19,6 +19,12 @@
static WiFiEventHandler gotIpEventHandler, disconnectedEventHandler;
#elif defined(STM32F4xx)
// #include <WiFi.h>
// #include "WiFiSpi.h"
// extern WiFiSpiClass WiFi;
SPIClass spi2(ESPSPI_MOSI, ESPSPI_MISO, ESPSPI_SCLK); // SPI port where esp is connected
#endif
//#include "DNSserver.h"
@ -43,7 +49,13 @@ uint8_t wifiReconnectCounter = 0;
void wifiConnected(IPAddress ipaddress)
{
#if defined(STM32F4xx)
IPAddress ip;
ip = WiFi.localIP();
Log.notice(F("WIFI: Received IP address %d.%d.%d.%d"), ip[0], ip[1], ip[2], ip[3]);
#else
Log.notice(F("WIFI: Received IP address %s"), ipaddress.toString().c_str());
#endif
Log.verbose(F("WIFI: Connected = %s"), WiFi.status() == WL_CONNECTED ? PSTR("yes") : PSTR("no"));
haspProgressVal(255);
@ -125,7 +137,9 @@ bool wifiShowAP(char * ssid, char * pass)
WiFi.macAddress(mac);
sprintf_P(ssid, PSTR("HASP-%02x%02x%02x"), mac[3], mac[4], mac[5]);
sprintf_P(pass, PSTR("haspadmin"));
#if defined(STM32F4xx)
Log.warning(F("WIFI: We should setup Temporary Access Point %s password: %s"), ssid, pass);
#else
WiFi.softAP(ssid, pass);
/* Setup the DNS server redirecting all the domains to the apIP */
@ -135,12 +149,47 @@ bool wifiShowAP(char * ssid, char * pass)
Log.warning(F("WIFI: Temporary Access Point %s password: %s"), ssid, pass);
Log.warning(F("WIFI: AP IP address : %s"), WiFi.softAPIP().toString().c_str());
// httpReconnect();}
#endif
return true;
}
void wifiSetup()
{
#if defined(STM32F4xx)
// Temp ESP reset function
pinMode(ESPSPI_RST, OUTPUT);
digitalWrite(ESPSPI_RST, 0);
delay(150);
digitalWrite(ESPSPI_RST, 1);
delay(150);
//
// Initialize the WifiSpi library
WiFiSpi.init(ESPSPI_CS, 8000000, &spi2);
// check for the presence of the shield:
if (WiFiSpi.status() == WL_NO_SHIELD) {
Log.notice(F("WIFI: WiFi shield not present"));
// don't continue:
while (true);
}
if (!WiFiSpi.checkProtocolVersion()) {
Log.notice(F("WIFI: Protocol version mismatch. Please upgrade the firmware"));
// don't continue:
while (true);
}
// attempt to connect to Wifi network
int status = WL_IDLE_STATUS; // the Wifi radio's status
// while (status != WL_CONNECTED) {
Log.notice(F("WIFI: Connecting to : %s"), wifiSsid);
// Connect to WPA/WPA2 network
status = WiFi.begin(wifiSsid, wifiPassword);
// }
#else
if(wifiShowAP()) {
WiFi.mode(WIFI_AP_STA);
} else {
@ -159,13 +208,18 @@ void wifiSetup()
WiFi.begin(wifiSsid, wifiPassword);
Log.notice(F("WIFI: Connecting to : %s"), wifiSsid);
}
#endif
}
bool wifiEvery5Seconds()
{
#if defined(STM32F4xx)
if(WiFi.status() == WL_CONNECTED) {
#else
if(WiFi.getMode() != WIFI_STA) {
return false;
} else if(WiFi.status() == WL_CONNECTED) {
#endif
return true;
} else {
wifiReconnectCounter++;
@ -224,14 +278,27 @@ bool wifiTestConnection()
{
uint8_t attempt = 0;
WiFi.begin(wifiSsid, wifiPassword);
#if defined(STM32F4xx)
IPAddress ip;
ip = WiFi.localIP();
char espIp[16];
memset(espIp, 0 ,sizeof(espIp));
snprintf_P(espIp, sizeof(espIp), PSTR("%d.%d.%d.%d"), ip[0], ip[1], ip[2], ip[3]);
while(attempt < 10 && (WiFi.status() != WL_CONNECTED || String(espIp) == F("0.0.0.0"))) {
#else
while(attempt < 10 && (WiFi.status() != WL_CONNECTED || WiFi.localIP().toString() == F("0.0.0.0"))) {
#endif
attempt++;
Log.verbose(F("WIFI: Trying to connect to %s... %u"), wifiSsid, attempt);
delay(1000);
}
#if defined(STM32F4xx)
Log.verbose(F("WIFI: Received IP addres %s"), espIp);
if((WiFi.status() == WL_CONNECTED && String(espIp) != F("0.0.0.0"))) return true;
#else
Log.verbose(F("WIFI: Received IP addres %s"), WiFi.localIP().toString().c_str());
if((WiFi.status() == WL_CONNECTED && WiFi.localIP().toString() != F("0.0.0.0"))) return true;
#endif
WiFi.disconnect();
return false;
}
@ -240,7 +307,9 @@ void wifiStop()
{
wifiReconnectCounter = 0; // Prevent endless loop in wifiDisconnected
WiFi.disconnect();
#if !defined(STM32F4xx)
WiFi.mode(WIFI_OFF);
#endif
Log.warning(F("WIFI: Stopped"));
}

View File

@ -0,0 +1,60 @@
;***************************************************;
; Generic ESP32 build with ;
; - ESP32dev board ;
; - ili9488 TFT ;
; - GT911 touch controller ;
;***************************************************;
[env:stm32f4xx-parallel]
platform = ststm32
board = diymore_f407vgt
board_build.mcu = stm32f407vet6
upload_protocol = dfu
monitor_port = COM7 ; To change the port, use platform_override.ini
build_flags =
${env.build_flags}
${flags.stm32_flags}
-I include/stm32f4
; -- TFT_eSPI build options ------------------------
-D ILI9341_DRIVER=1
-D TFT_WIDTH=240
-D TFT_HEIGHT=320
-D TFT_PARALLEL_8_BIT=1
-D TFT_BCKL=PB1 ;None, configurable via web UI (e.g. 2 for D4)
-D TFT_CS=PB12 ; Chip select control pin
-D TFT_DC=PD13 ; =RS; Data Command control pin - must use a pin in the range 0-31
-D TFT_RST=-1 ; Reset pin
-D TFT_WR=PD5 ; Write strobe control pin - must use a pin in the range 0-31
-D TFT_RD=PD4
-D TFT_D0=PD14 ; Must use pins in the range 0-31 for the data bus
-D TFT_D1=PD15 ; so a single register write sets/clears all bits
-D TFT_D2=PD0
-D TFT_D3=PD1
-D TFT_D4=PE7
-D TFT_D5=PE8
-D TFT_D6=PE9
-D TFT_D7=PE10
; -D TFT_SPI2
; -D TFT_SCLK=PB13
; -D TFT_MISO=PB14
; -D TFT_MOSI=PB15
; -D TOUCH_CS=PB12
; -D TOUCH_IRQ=PC5 ; use 34-39 as these are input only pins
; -D TOUCH_RST=-1 ; not used, connected to 3.3V
-D HASP_OUTPUT_PIN=PA6 ; User LED D2 on MCUDev Black board
-D HASP_INPUT_PIN=PE4 ; User Button K0 on MCUDev Black board
-D HASP_USE_HTTP=0
-D HASP_USE_MQTT=0
; -- Debugging options -----------------------------
; -D CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG
; -- Library options -------------------------------
lib_deps =
${env.lib_deps}
Ticker@^3.1.5
lib_ignore =
lv_lib_zifont
src_filter = +<*> -<.git/> -<.svn/> -<example/> -<examples/> -<test/> -<tests/> -<lv_lib_zifont/> +<stm32f4/>

View File

@ -0,0 +1,70 @@
;***************************************************;
; STM32F4 build with ;
; - DIY_more board ;
; - ili9341 TFT ;
; - xpt2046 touch controller ;
;***************************************************;
[env:black_f407vg_wifi]
platform = ststm32
board = diymore_f407vgt
board_build.mcu = stm32f407vgt6
upload_protocol = dfu
monitor_port = COM7 ; To change the port, use platform_override.ini
build_flags =
${env.build_flags}
${flags.stm32_flags}
-I include/stm32f4
; -- TFT_eSPI build options ------------------------
${lcd.lolin24}
;-D TFT_MISO=PB4 ;Default
;-D TFT_MOSI=PB5 ;Default
;-D TFT_SCLK=PB3 ;Default
-D USE_DMA_TO_TFT=1
-D TFT_CS=PE13 ;D8
-D TFT_DC=PE14 ;D3
-D TFT_BCKL=PA15 ;None, configurable via web UI (e.g. 2 for D4)
-D TOUCH_CS=PA6 ;NC
-D TFT_RST=PD13 ;D4
-D HASP_OUTPUT_PIN=PE0 ; User LED D2 on DevEBox board
-D HASP_INPUT_PIN=PD15 ; User Button K1 on DevEBox board
-D STM32_SERIAL1 ; Set this option to use Serial1 as default sersial port, leave out if using Serial2
;-D HAL_ETH_MODULE_ENABLED=1 ; enable ethernet support
;-D LAN8742A_PHY_ADDRESS=0x01U ; set LAN8720 PHY address
-D HASP_USE_WIFI=1
-D HASP_USE_MQTT=1
-D HASP_USE_HTTP=1
-D HASP_USE_MDNS=0
-D HASP_USE_SYSLOG=0
-D HASP_USE_TELNET=0
-D HASP_USE_SPIFFS=0
-D HASP_USE_EEPROM=1
-D HASP_USE_GPIO=0
-D HASP_USE_TASMOTA_SLAVE=0
-D HASP_USE_ETHERNET=0
-D ESPSPI_MOSI=PB15 ;SPI2 MOSI
-D ESPSPI_MISO=PB14 ;SPI2 MISO
-D ESPSPI_SCLK=PB13 ;SPI2 SCLK
-D ESPSPI_CS=PB6 ;SPI2 CS
-D ESPSPI_RST=PD1 ;SPI2 CS
lib_deps =
${env.lib_deps}
Ticker@^3.1.5
;Ethernet
; STM32duino LwIP@^2.1.2
; STM32duino STM32Ethernet@^1.0.5
; https://github.com/stm32duino/LwIP.git
; https://github.com/netwizeBE/Ethernet3.git
; https://github.com/khoih-prog/EthernetWebServer_STM32
https://github.com/arovak/EthernetWebServer_STM32.git
https://github.com/JiriBilek/WiFiSpi.git
lib_ignore =
GxTFT
XPT2046_Touchscreen
lv_lib_zifont
src_filter = +<*> -<.git/> -<.svn/> -<example/> -<examples/> -<test/> -<tests/> -<lv_lib_zifont/> +<stm32f4/>
;***************************************************