first commit

This commit is contained in:
Joshua Perry 2023-01-23 20:01:23 +00:00
commit 715e23ceec
6 changed files with 503 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/.vscode/

7
README.md Normal file
View File

@ -0,0 +1,7 @@
I have included some test code so you can see if you have setup the Arduino and transceiver correctly.
1)Connect the ESP-01S to the Arduino (pin out can be found online)
2)Go into test.ino and change the placeholder wifi name and password with same network details your laptop or PC is connected to.
2)Flash Arduino with test.ino
3)Run server.py on laptop or PC
4)Startup Arduino and wait to see if you receive message in python program output

413
Wifi.cpp Normal file
View File

@ -0,0 +1,413 @@
#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");
}

40
Wifi.h Normal file
View File

@ -0,0 +1,40 @@
#ifndef Wifi_h
#define Wifi_h
#include "Arduino.h"
#include "SoftwareSerial.h"
class Wifi {
public:
Wifi();
String checkStartup();
String restart();
String checkVersion();
String checkMode();
String changeMode(int mode);
String scanNetworks();
String connect(String ssid, String pass);
String connectedNetwork();
String disconnect();
String setStaticIP(String ip, String gate, String mask);
String checkStaticIP();
String checkAPConfig();
String setAPConfig(String ssid, String pass, int channel, int encryption);
String connectedDevices();
String connectionStatus();
String startConnection(String type, String ip, int port);
String startConnection(String type, String ip, int port, int linkid);
String send(String data);
String stopConnection();
String getIP();
String setAutoConnect(int mode);
String checkMultiConnect();
String setMultiConnect(int mode);
String setServer(int mode);
String setDHCP(int mode, int setting);
private:
SoftwareSerial *ESPSerial;
};
#endif

11
server.py Normal file
View File

@ -0,0 +1,11 @@
import socket
port = 420
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("", port))
while True:
print("Running")
data, addr = sock.recvfrom(1024)
print(f"Message recieved: {data.decode()}")

31
test.ino Normal file
View File

@ -0,0 +1,31 @@
#include "SoftwareSerial.h"
#include "Wifi.h"
Wifi* wifi;
String msg;
const int buttonPin = 7;
int buttonState = 0;
String wifiName = 'WIFINAME';
String wifiPass = 'WIFIPASS';
void setup()
{
pinMode(buttonPin, INPUT);
Serial.begin(9600);
wifi = new Wifi();
Serial.println(wifi -> checkStartup());
Serial.println(wifi -> restart());
Serial.println(wifi -> connect(wifiName, wifiPass));
}
void loop()
{
buttonState = digitalRead(buttonPin);
if(buttonState == HIGH) {
Serial.println(wifi -> startConnection("UDP", "192.168.1.70", 5000));
Serial.println(wifi -> send("hello"));
Serial.println(wifi -> stopConnection());
}
}