esp01s-arduino-interface/Wifi.cpp

413 lines
11 KiB
C++
Raw Normal View History

2023-01-23 20:01:23 +00:00
#include "Arduino.h"
#include "Wifi.h"
#include "SoftwareSerial.h"
SoftwareSerial *ESPSerial;
Wifi::Wifi() {
ESPSerial = new SoftwareSerial(2,3);
ESPSerial -> begin(9600);
delay(2000);
}
//Basic commands
String Wifi::checkStartup() {
ESPSerial -> flush();
ESPSerial -> print("AT\r\n");
ESPSerial -> setTimeout(5000);
if (ESPSerial -> find("OK") == 1) {
return "Startup Successful";
}
else {
return "Startup Unsuccessful";
}
}
String Wifi::restart() {
ESPSerial -> print("AT+RST\r\n");
ESPSerial -> setTimeout(5000);
if (ESPSerial -> find("OK") == 1) {
return "Successfully Restarted";
}
else {
return "Restart Unsuccessful";
}
}
String Wifi::checkVersion() {
ESPSerial -> print("AT+GMR\r\n");
ESPSerial -> setTimeout(5000);
String output = ESPSerial -> readString();
if (output.indexOf("OK") > 0) {
return output.substring(9,output.indexOf("OK"));
}
else {
return "Version check Unsuccessful";
}
}
//Wifi Commands
String Wifi::checkMode() {
ESPSerial -> print("AT+CWMODE?\r\n");
ESPSerial -> setTimeout(5000);
String output = ESPSerial -> readString();
int temp = 0;
if (output.indexOf("OK") > 0) {
if (output.substring(21,22) == "E") {
temp = 2;
}
else {
temp = 0;
}
switch(output.substring(21+temp, 22+temp).toInt()) {
case 1:
return "Currently set to Station Mode";
case 2:
return "Currently set to AP Mode";
case 3:
return "Currently set to Dual Mode";
}
}
else {
return "Mode check was Unsuccessful";
}
}
String Wifi::changeMode(int mode) {
String temp = "AT+CWMODE=";
temp += mode;
temp += "\r\n";
ESPSerial -> print(temp);
ESPSerial -> setTimeout(5000);
if(ESPSerial -> find("OK") == 1) {
return "Mode Change Successful";
}
else {
return "Mode Change Unsuccessful";
}
}
String Wifi::scanNetworks() {
ESPSerial -> print("AT+CWLAP\r\n");
ESPSerial -> setTimeout(5000);
String output = ESPSerial -> readString();
if (output.indexOf("OK") > 0) {
String temp = "Enc, SSID, SS, MAC Address, Chn, Freq Off, Freq Cali, Pairwise Cipher\n";
temp += output.substring(11,output.indexOf("OK"));
temp.replace("+CWLAP:(0", "Open");
temp.replace("+CWLAP:(1", "WEP");
temp.replace("+CWLAP:(2", "WPA_PSK");
temp.replace("+CWLAP:(3", "WPA2_PSK");
temp.replace("+CWLAP:(4", "WPA_WPA2_PSK");
temp.replace("+CWLAP:(5", "WPA2_Enterprise");
temp.replace("\"", "");
temp.replace(",", ", ");
temp.replace("0)", "None");
temp.replace("1)", "WEP40");
temp.replace("2)", "WEP104");
temp.replace("3)", "TKIP");
temp.replace("4)", "CCMP");
temp.replace("5)", "TKIP_CCMP");
temp.replace("6)", "Unknown");
return temp;
}
}
String Wifi::connect(String ssid, String pass) {
ESPSerial -> print("AT+CWJAP=\"" + ssid + "\",\"" + pass + "\"\r\n");
ESPSerial -> setTimeout(5000);
String output = ESPSerial -> readString();
if(output.indexOf("WIFI CONNECTED") > 0) {
return "Connected Successfully";
}
else {
return "Connection Unsuccessful";
}
}
String Wifi::connectedNetwork() {
ESPSerial -> print("AT+CWJAP?\r\n");
ESPSerial -> setTimeout(5000);
String output = ESPSerial -> readString();
if (output.indexOf("OK") > 0) {
String temp = "SSID, MAC, Chn, SS\n";
temp += output.substring(19, output.indexOf("OK")-1);
temp.replace("\"", "");
return temp;
}
else {
return "Unsuccessful connection query";
}
}
String Wifi::disconnect() {
ESPSerial -> print("AT+CWQAP\r\n");
ESPSerial -> setTimeout(5000);
if (ESPSerial -> find("WIFI DISCONNECT") == 1) {
return "Disconnected Successfully";
}
else {
return "Unsuccessful disconnect";
}
}
String Wifi::setStaticIP(String ip, String gate, String mask) {
ESPSerial -> print("AT+CIPSTA=\"" + ip + "\"\r\n");
ESPSerial -> setTimeout(5000);
if (ESPSerial -> find("OK") == 1) {
return "IP Successfully Set";
}
else {
return "IP was Unsuccessfuly Set";
}
}
String Wifi::checkStaticIP() {
ESPSerial -> print("AT+CIPSTA?\r\n");
ESPSerial -> setTimeout(5000);
String output = ESPSerial -> readString();
if (output.indexOf("OK") > 0) {
String temp = output.substring(12, output.indexOf("OK")-1);
temp.replace("+CIPSTA:", "");
temp.replace("\"", " ");
return temp;
}
else {
return "IP Check was Unsuccessful";
}
}
String Wifi::checkAPConfig() {
ESPSerial -> print("AT+CWSAP?\r\n");
ESPSerial -> setTimeout(5000);
String output = ESPSerial -> readString();
if(output.indexOf("OK") > 0) {
String temp = "SSID, PWD, Chn, Enc, Max Users, SSID status\n";
temp += output.substring(14, output.indexOf("OK")-1);
temp.replace("WSAP:", "");
return temp;
}
else {
return "AP Config Check Unsuccessful";
}
}
String Wifi::setAPConfig(String ssid, String pass, int channel, int encryption) {
String temp = "AT+CWSAP=\"";
temp += ssid;
temp += "\",\"";
temp += pass;
temp += "\",";
temp += channel;
temp += ",";
temp += encryption;
temp += "\r\n";
ESPSerial -> print(temp);
ESPSerial -> setTimeout(5000);
if(ESPSerial -> find("OK") == 1) {
return "AP Configuration Successful";
}
else {
return "AP Config Unsuccessful";
}
}
String Wifi::connectedDevices() {
ESPSerial -> print("AT+CWLIF\r\n");
ESPSerial -> setTimeout(5000);
String output = ESPSerial -> readString();
if(output.indexOf("OK") > 0) {
return output.substring(11, output.indexOf("OK"));
}
else {
return "Connected device query Unsuccessful";
}
}
//TCP/IP Commands
String Wifi::connectionStatus() {
ESPSerial -> print("AT+CIPSTATUS\r\n");
ESPSerial -> setTimeout(5000);
String output = ESPSerial -> readString();
if(output.indexOf("OK") > 0) {
String temp = output.substring(15, output.indexOf("OK"));
temp.replace("STATUS:2", "Connected to AP with IP");
temp.replace("STATUS:3", "Created TCP or UDP transmission");
temp.replace("STATUS:4", "Disconnected");
temp.replace("STATUS:5", "Does not connect");
return temp;
}
}
String Wifi::startConnection(String type, String ip, int port) {
String temp = "AT+CIPSTART=\"";
temp += type;
temp += "\",\"";
temp += ip;
temp += "\",";
temp += port;
temp += "\r\n";
ESPSerial -> print(temp);
ESPSerial -> setTimeout(5000);
String output = ESPSerial -> readString();
if(output.indexOf("OK") > 0 || output.indexOf("ALREADY CONNECTED") > 0) {
return "Connection Successful";
}
else {
return "Connection Unsuccessful";
}
}
String Wifi::startConnection(String type, String ip, int port, int linkid) {
String temp = "AT+CIPSTART=";
temp += linkid;
temp += ",\"";
temp += type;
temp += "\",\"";
temp += ip;
temp += "\",";
temp += port;
temp += "\r\n";
ESPSerial -> print(temp);
ESPSerial -> setTimeout(5000);
return ESPSerial -> readString();
if(ESPSerial -> find("OK") == 1) {
return "Connection Successful";
}
else {
return "Connection Unsuccessful";
}
}
String Wifi::send(String data) {
String temp = "AT+CIPSEND=";
temp += String(data.length());
temp += "\r\n";
ESPSerial -> print(temp);
ESPSerial -> setTimeout(5000);
if(ESPSerial -> find(">") == 1) {
ESPSerial -> print(data);
ESPSerial -> setTimeout(5000);
if(ESPSerial -> find("SEND OK") == 1) {
return "Data send succcessful";
}
}
else {
return "Data send unsuccessful";
}
}
String Wifi::stopConnection() {
ESPSerial -> print("AT+CIPCLOSE");
ESPSerial -> setTimeout(5000);
return ESPSerial -> readString();
}
String Wifi::getIP() {
ESPSerial -> print("AT+CIFSR\r\n");
ESPSerial -> setTimeout(5000);
String output = ESPSerial -> readString();
if(output.indexOf("OK") > 0) {
String temp = output.substring(11, output.indexOf("OK")-1);
temp.replace("+CIFSR:STA", "");
return temp;
}
else {
return "IP query Unsuccessful";
}
}
String Wifi::setAutoConnect(int mode) {
String temp = "AT+CWAUTOCONN=";
temp += mode;
ESPSerial -> print(temp);
ESPSerial -> setTimeout(5000);
String output = ESPSerial -> readString();
if(output.indexOf("OK") && mode == 0) {
return "Auto Connect turned off successfully";
}
else if (output.indexOf("OK") && mode == 1) {
return "Auto Connect turned on successfully";
}
else {
return "Auto Connect change unsuccessful";
}
}
String Wifi::checkMultiConnect() {
ESPSerial -> print("AT+CIPMUX?\r\n");
ESPSerial -> setTimeout(5000);
String output = ESPSerial -> readString();
if(output.indexOf("OK") > 0 && output.indexOf("0") > 0) {
return "Multiconnect is turned off";
}
if(output.indexOf("OK") > 0 && output.indexOf("1") > 0) {
return "Multiconnect is turned on";
}
else {
return "Multiconnect query unsuccessful";
}
}
String Wifi::setMultiConnect(int mode) {
String temp = "AT+CIPMUX=";
temp += mode;
temp += "\r\n";
ESPSerial -> print(temp);
ESPSerial -> setTimeout(5000);
if(ESPSerial -> find("OK") == 1) {
return "Multiconnect mode changed successfully";
}
else {
return "Multiconnect mode changed unsuccessfully";
}
}
String Wifi::setServer(int mode) {
String temp = "AT+CIPSERVER=";
temp += mode;
temp += "\r\n";
ESPSerial -> print(temp);
ESPSerial -> setTimeout(5000);
String output = ESPSerial -> readString();
if(output.indexOf("OK") > 0 && mode == 0) {
return "Server deleted successfully";
}
else if(output.indexOf("OK") > 0 && mode == 1) {
return "Server created successfully";
}
else {
return "Server mode changed unsuccessfully";
}
}
String Wifi::setDHCP(int mode, int setting) {
String temp = "AT+CWDHCP=";
temp += mode;
temp += ",";
temp += setting;
temp += "\r\n";
ESPSerial -> print(temp);
ESPSerial -> setTimeout(5000);
if(ESPSerial -> find("OK") == 1) {
return "DHCP set successfully";
}
else {
return "DHCP set unsuccessfully";
}
}
//Modifying this method causes a lot of errors?
void updateSoftware() {
ESPSerial -> print("AT+CIUPDATE");
}