|
|
@@ -4,21 +4,37 @@ extern "C" {
|
|
|
}
|
|
|
#include <Wire.h>
|
|
|
#include <ESP8266WiFi.h>
|
|
|
+#include <WiFiUdp.h>
|
|
|
|
|
|
#define MAX_CLIENTS 4
|
|
|
-#define SSIDVISIBLE 0
|
|
|
-#define SSIDHIDDEN 1
|
|
|
|
|
|
String WifiSSIDPrefix = "CrystalPoint";
|
|
|
char WifiPassword[10];
|
|
|
char WifiSSID[17];
|
|
|
|
|
|
-uint8_t NumberOfConnectedControllers = 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){
|
|
|
Serial.begin(115200);
|
|
|
+ Serial.println();
|
|
|
+
|
|
|
+ WiFi.onEvent(WiFiEvent);
|
|
|
|
|
|
//LED
|
|
|
pinMode(4,OUTPUT);
|
|
|
@@ -26,6 +42,8 @@ void setup(void){
|
|
|
|
|
|
//BUTTON
|
|
|
pinMode(5,INPUT);
|
|
|
+
|
|
|
+ Udp.begin(udpPort);
|
|
|
|
|
|
delay(100);
|
|
|
setupWifi();
|
|
|
@@ -33,59 +51,29 @@ void setup(void){
|
|
|
|
|
|
int SSIDVisibleTimeout = 0;
|
|
|
char SSIDVisible = 0;
|
|
|
-int NumCurrentConnections = 0;
|
|
|
-
|
|
|
-char ChangeInConnections = 0;
|
|
|
-int ChangedConnectionsTimeout = 0;
|
|
|
-char DeleteOrAdd = 0;
|
|
|
|
|
|
void loop(void){
|
|
|
-
|
|
|
- NumCurrentConnections = WiFi.softAPgetStationNum();
|
|
|
-
|
|
|
- if(NumberOfConnectedControllers != NumCurrentConnections){
|
|
|
- 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);
|
|
|
+ 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
|
|
|
+
|
|
|
+ // display the packet contents in HEX
|
|
|
+ for (int i=1;i<=noBytes;i++){
|
|
|
+ Serial.printf("%c", packetBuffer[i-1]);
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- if(ChangeInConnections == 1 && ChangedConnectionsTimeout > 1000)
|
|
|
- {
|
|
|
- ChangeInConnections = 0;
|
|
|
- ChangedConnectionsTimeout = 0;
|
|
|
- }
|
|
|
+ Serial.println();
|
|
|
+ }
|
|
|
|
|
|
- if(SSIDVisible == 1)
|
|
|
- {
|
|
|
- SSIDVisibleTimeout++;
|
|
|
- }
|
|
|
-
|
|
|
- if(SSIDVisible == 1 && SSIDVisibleTimeout > 2000)
|
|
|
+ if(SSIDVisible == 1 && (SSIDVisibleTimeout + 30000) < millis())
|
|
|
{
|
|
|
SSIDVisibleTimeout = 0;
|
|
|
ToggleWifiVisibility(0);
|
|
|
@@ -94,22 +82,21 @@ void loop(void){
|
|
|
if(digitalRead(5) == 1 && SSIDVisible == 0)
|
|
|
{
|
|
|
Serial.println("Button Pressed");
|
|
|
+ SSIDVisibleTimeout = millis();
|
|
|
ToggleWifiVisibility(1);
|
|
|
}
|
|
|
-
|
|
|
- delay(100);
|
|
|
}
|
|
|
|
|
|
void ToggleWifiVisibility(char v)
|
|
|
{
|
|
|
if(v == 1){
|
|
|
SSIDVisible = 1;
|
|
|
- WiFi.softAP(WifiSSID, WifiPassword, 6, SSIDVISIBLE);
|
|
|
+ WiFi.softAP(WifiSSID, WifiPassword, 6, 0);
|
|
|
digitalWrite(4, HIGH);
|
|
|
Serial.println("Wifi Visible");
|
|
|
}else if(v == 0){
|
|
|
SSIDVisible = 0;
|
|
|
- WiFi.softAP(WifiSSID, WifiPassword, 6, SSIDHIDDEN);
|
|
|
+ WiFi.softAP(WifiSSID, WifiPassword, 6, 1);
|
|
|
digitalWrite(4, LOW);
|
|
|
Serial.println("Wifi Hidden");
|
|
|
}
|
|
|
@@ -136,7 +123,8 @@ void RepopulateConnectionList(char n)
|
|
|
//str += IPAddress((stat_info->ip).addr).toString();
|
|
|
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.
|
|
|
ConnectionList[missingIP].addr = 0;
|
|
|
Serial.printf("Controller %d disconnected \n\r", missingIP);
|
|
|
@@ -181,7 +169,7 @@ void setupWifi(void){
|
|
|
generateWiFiSSID();
|
|
|
generateWiFiPassword();
|
|
|
|
|
|
- WiFi.softAP(WifiSSID, WifiPassword, 6, SSIDVISIBLE);
|
|
|
+ WiFi.softAP(WifiSSID, WifiPassword, 6, 1);
|
|
|
}
|
|
|
|
|
|
void generateWiFiSSID()
|
|
|
@@ -213,3 +201,4 @@ void generateWiFiPassword()
|
|
|
Serial.print("Wifi password: ");
|
|
|
Serial.println(WifiPassword);
|
|
|
}
|
|
|
+
|