1#ifndef wifidumbdisplay_h
2#define wifidumbdisplay_h
7#include "dumbdisplay.h"
9#if defined(ARDUINO_UNOR4_WIFI)
12 #include <ESP8266WiFi.h>
29 DDWiFiServerIO(
const char* ssid = NULL,
const char *passphrase = NULL,
int serverPort = DD_WIFI_PORT):
30 DDInputOutput(DD_SERIAL_BAUD,
false,
false), server(serverPort) {
32 this->password = passphrase;
33 this->port = serverPort;
37 const char* getWhat() {
52 return client.available() > 0;
57 void print(
const String &s) {
60 void print(
const char *p) {
63 void write(uint8_t b) {
66 void write(
const uint8_t *buf,
size_t size) {
68 Serial.print(
"*** write ");
70 Serial.print(
" ... ");
71 size_t written = client.write(buf, size);
72 Serial.println(written);
74 client.write(buf, size);
77 bool preConnect(
bool firstCall) {
79 if (!Serial) Serial.begin(DD_SERIAL_BAUD);
80#if defined(ARDUINO_UNOR4_WIFI)
81 if (WiFi.status() == WL_NO_MODULE) {
82 Serial.println(
"XXX communication with WiFi module failed");
84 String fv = WiFi.firmwareVersion();
85 if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
86 Serial.println(
"XXX please upgrade the firmware");
88 Serial.println(
"* WIFI_FIRMWARE_LATEST_VERSION=" + String(WIFI_FIRMWARE_LATEST_VERSION));
92 if (firstCall && !client.connected()) {
93 connectionState =
'0';
96 return connectionState ==
'C';
101 void validConnection() {
102#ifdef LOG_DDWIFI_STATUS
103 Serial.println(
" ... validate ...");
107 bool canConnectPassive() {
110 bool canUseBuffer() {
185 void checkConnection() {
186 if (connectionState ==
'0' || connectionState ==
'C') {
187 if (connectionState ==
'0' || WiFi.status() != WL_CONNECTED) {
188 if (connectionState ==
'C') {
189 Serial.println(
"lost WiFi ... try bind WiFi again ...");
192 if (ssid != NULL && WiFi.status() != WL_CONNECTED) {
194 Serial.println(
"setup WIFI");
195 WiFi.begin(ssid, password);
197 Serial.println(
"assume explicitly connected WIFI");
199 connectionState =
' ';
201 }
else if (!client.connected()) {
203 Serial.println(
"lost connection ... try bind again ...");
204 connectionState =
'W';
210 if (connectionState ==
' ') {
211 uint8_t status = WiFi.status();
212 if (status == WL_CONNECTED) {
213 Serial.print(
"binded WIFI ");
214 Serial.println(ssid);
216 connectionState =
'W';
219 long diff = millis() - stateMillis;
220 if (stateMillis == 0 || diff > 1000) {
221 Serial.print(
"binding WIFI ");
223#ifdef LOG_DDWIFI_STATUS
224 Serial.print(
" ... ");
225 Serial.print(status);
227 Serial.println(
" ...");
228 stateMillis = millis();
232 uint8_t status = WiFi.status();
233 if (status != WL_CONNECTED) {
234 connectionState =
' ';
237 long diff = millis() - stateMillis;
239 IPAddress localIP = WiFi.localIP();
241#ifdef LOG_DDWIFI_STATUS
242 Serial.print(
"via WIFI ... ");
243 Serial.print(WiFi.status());
244 Serial.print(
" ... ");
246 Serial.print(
"listening on ");
247 Serial.print(localIP);
250 Serial.println(
" ...");
258 stateMillis = millis();
260 WiFiClient cli = server.available();
263 connectionState =
'C';
265 Serial.println(
"client connected");
274 const char *password;
277 char connectionState;
Subclass of DDInputOutput.
Definition: wifidumbdisplay.h:23