1#ifndef wifidumbdisplay_h
2#define wifidumbdisplay_h
7#include "dumbdisplay.h"
9#if defined(ARDUINO_UNOR4_WIFI)
12 #include <ESP8266WiFi.h>
18#ifndef DD_SHOW_IP_INTERVAL_SECONDS
19 #define DD_SHOW_IP_INTERVAL_SECONDS 2
33 DDWiFiServerIO(
const char* ssid = NULL,
const char *passphrase = NULL,
int serverPort = DD_WIFI_PORT):
34 DDInputOutput(DD_SERIAL_BAUD,
false,
false), server(serverPort) {
36 this->password = passphrase;
37 this->port = serverPort;
41 const char* getWhat() {
56 return client.available() > 0;
61 void print(
const String &s) {
64 void print(
const char *p) {
67 void write(uint8_t b) {
70 void write(
const uint8_t *buf,
size_t size) {
72 Serial.print(
"*** write ");
74 Serial.print(
" ... ");
75 size_t written = client.write(buf, size);
76 Serial.println(written);
78 client.write(buf, size);
81 bool preConnect(
bool firstCall) {
83 if (!Serial) Serial.begin(DD_SERIAL_BAUD);
84#if defined(ARDUINO_UNOR4_WIFI)
85 if (WiFi.status() == WL_NO_MODULE) {
86 Serial.println(
"XXX communication with WiFi module failed");
88 String fv = WiFi.firmwareVersion();
89 if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
90 Serial.println(
"XXX please upgrade the firmware");
92 Serial.println(
"* WIFI_FIRMWARE_LATEST_VERSION=" + String(WIFI_FIRMWARE_LATEST_VERSION));
96 if (firstCall && !client.connected()) {
97 connectionState =
'0';
100 return connectionState ==
'C';
105 void validConnection() {
106#ifdef LOG_DDWIFI_STATUS
107 Serial.println(
" ... validate ...");
111 bool canConnectPassive() {
114 bool canUseBuffer() {
189 void checkConnection() {
190 if (connectionState ==
'0' || connectionState ==
'C') {
191 if (connectionState ==
'0' || WiFi.status() != WL_CONNECTED) {
192 if (connectionState ==
'C') {
193 Serial.println(
"lost WiFi ... try bind WiFi again ...");
196 if (ssid != NULL && WiFi.status() != WL_CONNECTED) {
198 Serial.println(
"setup WIFI");
199 WiFi.begin(ssid, password);
201 Serial.println(
"assume explicitly connected WIFI");
203 connectionState =
' ';
205 }
else if (!client.connected()) {
207 Serial.println(
"lost connection ... try bind again ...");
208 connectionState =
'W';
214 if (connectionState ==
' ') {
215 uint8_t status = WiFi.status();
216 if (status == WL_CONNECTED) {
217 Serial.print(
"binded WIFI ");
218 Serial.println(ssid);
220 connectionState =
'W';
223 long diff = millis() - stateMillis;
224 if (stateMillis == 0 || diff > 1000) {
225 Serial.print(
"binding WIFI ");
227#ifdef LOG_DDWIFI_STATUS
228 Serial.print(
" ... ");
229 Serial.print(status);
231 Serial.println(
" ...");
232 stateMillis = millis();
236 uint8_t status = WiFi.status();
237 if (status != WL_CONNECTED) {
238 connectionState =
' ';
241 long diff = millis() - stateMillis;
242 if (stateMillis == 0 || (DD_SHOW_IP_INTERVAL_SECONDS > 0 && diff >= (1000 * DD_SHOW_IP_INTERVAL_SECONDS))) {
243 IPAddress localIP = WiFi.localIP();
245#ifdef LOG_DDWIFI_STATUS
246 Serial.print(
"via WIFI ... ");
247 Serial.print(WiFi.status());
248 Serial.print(
" ... ");
250 Serial.print(
"listening on ");
251 Serial.print(localIP);
254 Serial.println(
" ...");
262 stateMillis = millis();
264 WiFiClient cli = server.available();
267 connectionState =
'C';
269 Serial.println(
"client connected");
278 const char *password;
281 char connectionState;
Subclass of DDInputOutput.
Definition: wifidumbdisplay.h:27