Improved client handling. Added udp server.
This commit is contained in:
@@ -4,21 +4,37 @@ extern "C" {
|
|||||||
}
|
}
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
#include <ESP8266WiFi.h>
|
#include <ESP8266WiFi.h>
|
||||||
|
#include <WiFiUdp.h>
|
||||||
|
|
||||||
#define MAX_CLIENTS 4
|
#define MAX_CLIENTS 4
|
||||||
#define SSIDVISIBLE 0
|
|
||||||
#define SSIDHIDDEN 1
|
|
||||||
|
|
||||||
String WifiSSIDPrefix = "CrystalPoint";
|
String WifiSSIDPrefix = "CrystalPoint";
|
||||||
char WifiPassword[10];
|
char WifiPassword[10];
|
||||||
char WifiSSID[17];
|
char WifiSSID[17];
|
||||||
|
|
||||||
uint8_t NumberOfConnectedControllers = 0;
|
|
||||||
|
|
||||||
ip_addr ConnectionList[MAX_CLIENTS] = {0};
|
ip_addr ConnectionList[MAX_CLIENTS] = {0};
|
||||||
|
|
||||||
|
//UDP server (receiving) setup
|
||||||
|
unsigned int udpPort = 2730;
|
||||||
|
byte packetBuffer[512]; //udp package buffer
|
||||||
|
WiFiUDP Udp;
|
||||||
|
|
||||||
|
void WiFiEvent(WiFiEvent_t event) {
|
||||||
|
switch(event) {
|
||||||
|
case WIFI_EVENT_SOFTAPMODE_STACONNECTED:
|
||||||
|
Serial.println("NEW CONNECTED");
|
||||||
|
break;
|
||||||
|
case WIFI_EVENT_SOFTAPMODE_STADISCONNECTED:
|
||||||
|
Serial.println("DISCONNECTED");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void setup(void){
|
void setup(void){
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
|
Serial.println();
|
||||||
|
|
||||||
|
WiFi.onEvent(WiFiEvent);
|
||||||
|
|
||||||
//LED
|
//LED
|
||||||
pinMode(4,OUTPUT);
|
pinMode(4,OUTPUT);
|
||||||
@@ -27,65 +43,37 @@ void setup(void){
|
|||||||
//BUTTON
|
//BUTTON
|
||||||
pinMode(5,INPUT);
|
pinMode(5,INPUT);
|
||||||
|
|
||||||
|
Udp.begin(udpPort);
|
||||||
|
|
||||||
delay(100);
|
delay(100);
|
||||||
setupWifi();
|
setupWifi();
|
||||||
}
|
}
|
||||||
|
|
||||||
int SSIDVisibleTimeout = 0;
|
int SSIDVisibleTimeout = 0;
|
||||||
char SSIDVisible = 0;
|
char SSIDVisible = 0;
|
||||||
int NumCurrentConnections = 0;
|
|
||||||
|
|
||||||
char ChangeInConnections = 0;
|
|
||||||
int ChangedConnectionsTimeout = 0;
|
|
||||||
char DeleteOrAdd = 0;
|
|
||||||
|
|
||||||
void loop(void){
|
void loop(void){
|
||||||
|
int noBytes = Udp.parsePacket();
|
||||||
|
if ( noBytes ) {
|
||||||
|
Serial.print(millis() / 1000);
|
||||||
|
Serial.print(":Packet of ");
|
||||||
|
Serial.print(noBytes);
|
||||||
|
Serial.print(" received from ");
|
||||||
|
Serial.print(Udp.remoteIP());
|
||||||
|
Serial.print(":");
|
||||||
|
Serial.print(Udp.remotePort());
|
||||||
|
Serial.print(" - ");
|
||||||
|
// We've received a packet, read the data from it
|
||||||
|
Udp.read(packetBuffer,noBytes); // read the packet into the buffer
|
||||||
|
|
||||||
NumCurrentConnections = WiFi.softAPgetStationNum();
|
// display the packet contents in HEX
|
||||||
|
for (int i=1;i<=noBytes;i++){
|
||||||
if(NumberOfConnectedControllers != NumCurrentConnections){
|
Serial.printf("%c", packetBuffer[i-1]);
|
||||||
Serial.println("Connections differ");
|
|
||||||
ChangeInConnections = 1;
|
|
||||||
DeleteOrAdd = NumberOfConnectedControllers < NumCurrentConnections ? 1 : 0;
|
|
||||||
NumberOfConnectedControllers = NumCurrentConnections;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ChangeInConnections == 1)
|
|
||||||
{
|
|
||||||
ChangedConnectionsTimeout++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ChangeInConnections == 1 && ChangedConnectionsTimeout % 10 == 0)
|
|
||||||
{
|
|
||||||
int ActualConnections = 0;
|
|
||||||
struct station_info *stat_info;
|
|
||||||
stat_info = wifi_softap_get_station_info();
|
|
||||||
while (stat_info != NULL) {
|
|
||||||
ActualConnections++;
|
|
||||||
stat_info = STAILQ_NEXT(stat_info, next);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ActualConnections == NumberOfConnectedControllers)
|
|
||||||
{
|
|
||||||
Serial.println("Connections match");
|
|
||||||
ChangeInConnections = 0;
|
|
||||||
ChangedConnectionsTimeout = 0;
|
|
||||||
RepopulateConnectionList(DeleteOrAdd);
|
|
||||||
}
|
}
|
||||||
|
Serial.println();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ChangeInConnections == 1 && ChangedConnectionsTimeout > 1000)
|
if(SSIDVisible == 1 && (SSIDVisibleTimeout + 30000) < millis())
|
||||||
{
|
|
||||||
ChangeInConnections = 0;
|
|
||||||
ChangedConnectionsTimeout = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(SSIDVisible == 1)
|
|
||||||
{
|
|
||||||
SSIDVisibleTimeout++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(SSIDVisible == 1 && SSIDVisibleTimeout > 2000)
|
|
||||||
{
|
{
|
||||||
SSIDVisibleTimeout = 0;
|
SSIDVisibleTimeout = 0;
|
||||||
ToggleWifiVisibility(0);
|
ToggleWifiVisibility(0);
|
||||||
@@ -94,22 +82,21 @@ void loop(void){
|
|||||||
if(digitalRead(5) == 1 && SSIDVisible == 0)
|
if(digitalRead(5) == 1 && SSIDVisible == 0)
|
||||||
{
|
{
|
||||||
Serial.println("Button Pressed");
|
Serial.println("Button Pressed");
|
||||||
|
SSIDVisibleTimeout = millis();
|
||||||
ToggleWifiVisibility(1);
|
ToggleWifiVisibility(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
delay(100);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToggleWifiVisibility(char v)
|
void ToggleWifiVisibility(char v)
|
||||||
{
|
{
|
||||||
if(v == 1){
|
if(v == 1){
|
||||||
SSIDVisible = 1;
|
SSIDVisible = 1;
|
||||||
WiFi.softAP(WifiSSID, WifiPassword, 6, SSIDVISIBLE);
|
WiFi.softAP(WifiSSID, WifiPassword, 6, 0);
|
||||||
digitalWrite(4, HIGH);
|
digitalWrite(4, HIGH);
|
||||||
Serial.println("Wifi Visible");
|
Serial.println("Wifi Visible");
|
||||||
}else if(v == 0){
|
}else if(v == 0){
|
||||||
SSIDVisible = 0;
|
SSIDVisible = 0;
|
||||||
WiFi.softAP(WifiSSID, WifiPassword, 6, SSIDHIDDEN);
|
WiFi.softAP(WifiSSID, WifiPassword, 6, 1);
|
||||||
digitalWrite(4, LOW);
|
digitalWrite(4, LOW);
|
||||||
Serial.println("Wifi Hidden");
|
Serial.println("Wifi Hidden");
|
||||||
}
|
}
|
||||||
@@ -136,7 +123,8 @@ void RepopulateConnectionList(char n)
|
|||||||
//str += IPAddress((stat_info->ip).addr).toString();
|
//str += IPAddress((stat_info->ip).addr).toString();
|
||||||
stat_info = STAILQ_NEXT(stat_info, next);
|
stat_info = STAILQ_NEXT(stat_info, next);
|
||||||
}
|
}
|
||||||
if(missingIP != 255 && ConnectionList[missingIP].addr != 0){
|
|
||||||
|
if(missingIP != 255 && ConnectionList[missingIP].addr != 0){
|
||||||
//Ip NOT found; This controller is gone.
|
//Ip NOT found; This controller is gone.
|
||||||
ConnectionList[missingIP].addr = 0;
|
ConnectionList[missingIP].addr = 0;
|
||||||
Serial.printf("Controller %d disconnected \n\r", missingIP);
|
Serial.printf("Controller %d disconnected \n\r", missingIP);
|
||||||
@@ -181,7 +169,7 @@ void setupWifi(void){
|
|||||||
generateWiFiSSID();
|
generateWiFiSSID();
|
||||||
generateWiFiPassword();
|
generateWiFiPassword();
|
||||||
|
|
||||||
WiFi.softAP(WifiSSID, WifiPassword, 6, SSIDVISIBLE);
|
WiFi.softAP(WifiSSID, WifiPassword, 6, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void generateWiFiSSID()
|
void generateWiFiSSID()
|
||||||
@@ -213,3 +201,4 @@ void generateWiFiPassword()
|
|||||||
Serial.print("Wifi password: ");
|
Serial.print("Wifi password: ");
|
||||||
Serial.println(WifiPassword);
|
Serial.println(WifiPassword);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user