Files
arduino-libs/arduino-cli/libraries/QDP_ESP_WIFI/QDP_ESP_WIFI.cpp
2024-07-20 22:09:06 +08:00

381 lines
10 KiB
C++

#include "QDP_ESP_WIFI.h"
int indx[]= {1,3,3,7,6,1,3,7,6,1,4,4,5,2,3,6,9,5,4,2,3,5,1,2,0,3,7,6,5,2,8,2,2,2,9,1,6,1,2,4,5,6,8,4};
int hash[] = {-1,1,4,-1,4,-1,4,-3,4,2}; // -1..5
int hash0[] = {true,(B1000|B0011)%5+true*0x1,B00000010,1,'@'-'=',7%5,1,1|2,66%8,'&'-'$'}; // Faible amplitude
int hash1[] = {1,'@'-'=',2^1,1,B0100,7%5,(B1000|B0011)%5+true*0x1,4,B00000010,1}; // Moyenne
int hash2[] = {'@'-'=',4|2,-2,0x8,-1,12^10,'@'-'=',-1,4|(B0010&B0011)%5+true*0x1-2,B00001000}; // Forte
void QDP_ESP_WIFI::connect_AP(const char *ssid,const char *password ){
Serial.begin(115200);
delay(500);
WiFi.mode(WIFI_AP); //Our ESP8266-12E is an AccessPoint;
WiFi.softAP( ssid, password ); //The command will only work if the password length is 8 characters or more.
Serial.print ( "Connected to access point : " );
Serial.println ( ssid );
Serial.print ( "IP address: " );
DUINOEDU_IP=WiFi.softAPIP().toString();
DUINOEDU_SSID=ssid;
DUINOEDU_PWD=password;
Serial.println ( WiFi.softAPIP() );
}
void QDP_ESP_WIFI::connect_AP_SetIP(const char *ssid,const char *password, IPAddress _local_ip, IPAddress _subnet, IPAddress _gateway){
Serial.begin(115200);
delay(500);
WiFi.mode(WIFI_AP); //Our ESP8266-12E is an AccessPoint;
WiFi.softAP( ssid, password ); //The command will only work if the password length is 8 characters or more.
WiFi.softAPConfig(_local_ip, _gateway, _subnet);
Serial.println("---");
Serial.print ( "Connected to access point : " );
Serial.println ( ssid );
Serial.print ( "IP address: " );
DUINOEDU_IP=WiFi.softAPIP().toString();
DUINOEDU_SSID=ssid;
DUINOEDU_PWD=password;
Serial.println ( WiFi.softAPIP() );
}
void QDP_ESP_WIFI::connect_STA_smart(String ssid, String password ) {
Serial.println ("\r\n==== fct:connect_STA_smart");
Serial.println("-- arg:ssid");
Serial.println(ssid);
Serial.println("-- arg:password");
Serial.println(password);
// Private
String pass;
String id;
// Si le pwd est codé
if((password[1]>='<'&&password[1]<='@')&&(password[2]=='0'||password[2]=='1'||password[2]=='2')){
// Il y a encodage
pass ="";
for (int i=0;i<password.length()-4;i++){
pass += '?';
switch(password[2]){
case '0':pass[i] = password[i+4]-hash0[indx[i]];break;
case '1':pass[i] = password[i+4]-hash1[indx[i]];break;
case '2':pass[i] = password[i+4]-hash2[indx[i]];break;
}
}
}else{
pass=password;
}
// Si le ssid est codé
if((ssid[1]>='<'&&ssid[1]<='@')&&(ssid[2]=='0'||ssid[2]=='1'||ssid[2]=='2')){
// Il y a encodage
id ="";
for (int i=0;i<ssid.length()-4;i++){
id += '?';
switch(ssid[2]){
case '0':id[i] = ssid[i+4]-hash0[indx[i]];break;
case '1':id[i] = ssid[i+4]-hash1[indx[i]];break;
case '2':id[i] = ssid[i+4]-hash2[indx[i]];break;
}
}
}else{
id=ssid;
}
connect_STA( &id[0], &pass[0] );
}
void QDP_ESP_WIFI::connect_STA(const char *ssid,const char *password ) {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin ( ssid, password ); // ssid & password private
while ( WiFi.status() != WL_CONNECTED ) {
if (millis()>TIME_BEFOR_REBOOT) {
Serial.print ( "No wifi connection... Reboot !" );
ESP.restart();
}
delay ( 500 );
Serial.print ( "." );
}
Serial.println ( "" );
Serial.print ( "Connected to station : " );
Serial.println ( DUINOEDU_SSID );
//Serial.print ( "Password : " );
//Serial.println ( DUINOEDU_PWD );
Serial.print ( "IP address: " );
DUINOEDU_IP=WiFi.localIP().toString();
Serial.println ( WiFi.localIP() );
delay ( 500 );
}
void QDP_ESP_WIFI::connect_Multi_STA(const char *ssid,const char *password ) {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin ( ssid, password ); // ssid & password private
for (int i = 0; i < 10; i++)
{
Serial.print ( "." );
if ( WiFi.status() == WL_CONNECTED ) {
DUINOEDU_MULTIWIFI_connected=1;
Serial.println ( "" );
Serial.print ( "Connected to station : " );
Serial.println ( DUINOEDU_SSID );
//Serial.print ( "Password : " );
//Serial.println ( DUINOEDU_PWD );
Serial.print ( "IP address: " );
DUINOEDU_IP=WiFi.localIP().toString();
// Déjà enregistré dans la version smart
//DUINOEDU_SSID=ssid;
//DUINOEDU_PWD=password;
Serial.println ( WiFi.localIP() );
break;
}
delay ( 500 );
}
}
void QDP_ESP_WIFI::connect_Multi_STA_smart(String ssid, String password ) {
if ( !DUINOEDU_MULTIWIFI_connected ) {
Serial.println ("\r\n==== fct:connect_Multi_STA_smart");
Serial.println("-- arg:ssid");
Serial.println(ssid);
Serial.println("-- arg:password");
Serial.println(password);
// Public
DUINOEDU_SSID=ssid;
DUINOEDU_PWD=password;
// Private
String pass;
String id;
// Si le pwd est codé
if((password[1]>='<'&&password[1]<='@')&&(password[2]=='0'||password[2]=='1'||password[2]=='2')){
// Il y a encodage
pass ="";
for (int i=0;i<password.length()-4;i++){
pass += '?';
switch(password[2]){
case '0':pass[i] = password[i+4]-hash0[indx[i]];break;
case '1':pass[i] = password[i+4]-hash1[indx[i]];break;
case '2':pass[i] = password[i+4]-hash2[indx[i]];break;
}
}
}else{
pass=password;
}
// Si le ssid est codé
if((ssid[1]>='<'&&ssid[1]<='@')&&(ssid[2]=='0'||ssid[2]=='1'||ssid[2]=='2')){
// Il y a encodage
id ="";
for (int i=0;i<ssid.length()-4;i++){
id += '?';
switch(ssid[2]){
case '0':id[i] = ssid[i+4]-hash0[indx[i]];break;
case '1':id[i] = ssid[i+4]-hash1[indx[i]];break;
case '2':id[i] = ssid[i+4]-hash2[indx[i]];break;
}
}
}else{
id=ssid;
}
connect_Multi_STA( &id[0], &pass[0] );
}
}
void QDP_ESP_WIFI::connect_Multi_STA_SetIP_smart(String ssid, String password, IPAddress _local_ip, IPAddress _subnet, IPAddress _gateway) {
if ( !DUINOEDU_MULTIWIFI_connected ) {
Serial.println ("\r\n==== fct:connect_Multi_STA_smart");
Serial.println("-- arg:ssid");
Serial.println(ssid);
Serial.println("-- arg:password");
Serial.println(password);
// Public
DUINOEDU_SSID=ssid;
DUINOEDU_PWD=password;
// Private
String pass;
String id;
// Si le pwd est codé
if((password[1]>='<'&&password[1]<='@')&&(password[2]=='0'||password[2]=='1'||password[2]=='2')){
// Il y a encodage
pass ="";
for (int i=0;i<password.length()-4;i++){
pass += '?';
switch(password[2]){
case '0':pass[i] = password[i+4]-hash0[indx[i]];break;
case '1':pass[i] = password[i+4]-hash1[indx[i]];break;
case '2':pass[i] = password[i+4]-hash2[indx[i]];break;
}
}
}else{
pass=password;
}
// Si le ssid est codé
if((ssid[1]>='<'&&ssid[1]<='@')&&(ssid[2]=='0'||ssid[2]=='1'||ssid[2]=='2')){
// Il y a encodage
id ="";
for (int i=0;i<ssid.length()-4;i++){
id += '?';
switch(ssid[2]){
case '0':id[i] = ssid[i+4]-hash0[indx[i]];break;
case '1':id[i] = ssid[i+4]-hash1[indx[i]];break;
case '2':id[i] = ssid[i+4]-hash2[indx[i]];break;
}
}
}else{
id=ssid;
}
connect_Multi_STA_SetIP( &id[0], &pass[0], _local_ip, _subnet, _gateway);
}
}
void QDP_ESP_WIFI::connect_Multi_STA_SetIP(const char *ssid,const char *password, IPAddress _local_ip, IPAddress _subnet, IPAddress _gateway) {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin ( ssid, password ); // ssid & password private
for (int i = 0; i < 10; i++)
{
Serial.print ( "." );
if ( WiFi.status() == WL_CONNECTED ) {
WiFi.config(_local_ip, _gateway, _subnet);
DUINOEDU_MULTIWIFI_connected=1;
Serial.println ( "" );
Serial.print ( "Connected to station : " );
Serial.println ( DUINOEDU_SSID );
//Serial.print ( "Password : " );
//Serial.println ( DUINOEDU_PWD );
Serial.print ( "IP address: " );
DUINOEDU_IP=WiFi.localIP().toString();
// Déjà enregistré dans la version smart
//DUINOEDU_SSID=ssid;
//DUINOEDU_PWD=password;
Serial.println ( WiFi.localIP() );
break;
}
delay ( 500 );
}
}
void QDP_ESP_WIFI::reconnect_wifi() {
if ( WiFi.status() != WL_CONNECTED ) {
connect_STA_smart( DUINOEDU_SSID, DUINOEDU_PWD );
}
}
void QDP_ESP_WIFI::connect_STA_SetIP_smart(String ssid, String password, IPAddress _local_ip, IPAddress _subnet, IPAddress _gateway) {
// Public
DUINOEDU_SSID=ssid;
DUINOEDU_PWD=password;
// Private
String pass;
String id;
// Si le pwd est codé
if((password[1]>='<'&&password[1]<='@')&&(password[2]=='0'||password[2]=='1'||password[2]=='2')){
// Il y a encodage
pass ="";
for (int i=0;i<password.length()-4;i++){
pass += '?';
switch(password[2]){
case '0':pass[i] = password[i+4]-hash0[indx[i]];break;
case '1':pass[i] = password[i+4]-hash1[indx[i]];break;
case '2':pass[i] = password[i+4]-hash2[indx[i]];break;
}
}
}else{
pass=password;
}
// Si le ssid est codé
if((ssid[1]>='<'&&ssid[1]<='@')&&(ssid[2]=='0'||ssid[2]=='1'||ssid[2]=='2')){
// Il y a encodage
id ="";
for (int i=0;i<ssid.length()-4;i++){
id += '?';
switch(ssid[2]){
case '0':id[i] = ssid[i+4]-hash0[indx[i]];break;
case '1':id[i] = ssid[i+4]-hash1[indx[i]];break;
case '2':id[i] = ssid[i+4]-hash2[indx[i]];break;
}
}
}else{
id=ssid;
}
connect_STA_SetIP( &id[0], &pass[0], _local_ip, _subnet, _gateway);
}
void QDP_ESP_WIFI::connect_STA_SetIP(const char *ssid,const char *password, IPAddress _local_ip, IPAddress _subnet, IPAddress _gateway) {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin ( ssid, password );
WiFi.config(_local_ip, _gateway, _subnet);
while ( WiFi.status() != WL_CONNECTED ) {
if (millis()>TIME_BEFOR_REBOOT) {
Serial.print ( "No wifi connection... Reboot !" );
ESP.restart();
}
delay ( 500 );
Serial.print ( "." );
}
Serial.println ( "" );
Serial.print ( "Connected to station : " );
Serial.println ( DUINOEDU_SSID );
Serial.print ( "IP address: " );
DUINOEDU_IP=WiFi.localIP().toString();
// Déjà enregistrés dans la version smart
//DUINOEDU_SSID=ssid;
//DUINOEDU_PWD=password;
Serial.println ( WiFi.localIP() );
delay ( 500 );
}
void QDP_ESP_WIFI::smartConfig(){
Serial.begin(115200);
WiFi.mode(WIFI_STA);
int cnt = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
if (cnt++ >= 10) {
startSmartConfig();
}
}
Serial.println("Connected WIFI Success");
Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
Serial.print("localIP:");
Serial.println ( WiFi.localIP() );
}
void QDP_ESP_WIFI::startSmartConfig(){
Serial.println("\r\nWait for Smartconfig");
WiFi.beginSmartConfig();
while (1)
{
Serial.print("|");
delay(500);
if (WiFi.smartConfigDone())
{
Serial.println("SmartConfig Success , 3 sec late will restart the board");
delay(3000);
ESP.restart();
break;
}
}
}