Nell’articolo di oggi vedremo come utilizzare ESP32 come server e comunicare con esso tramite un PC (in particolar modo con Arduino IDE) tramite il protocollo TCP-IP.
Nell’articolo precedente abbiamo parlato del protocollo TCP/IP, riprendiamo brevemente tale concetto.
TCP/IP è un protocollo di collegamento dati utilizzato in Internet per consentire a computer e altri dispositivi di inviare e ricevere dati. TCP/IP sta per Transmission Control Protocol/Internet Protocol, cioè un sistema che consente ai dispositivi connessi a Internet di comunicare tra loro attraverso le reti.
Cosa fare con ESP32
Installare processing dal seguente link https://processing.org/download/.
Estrarre la cartella compressa e cliccare su “processing.exe” come mostrato nell’immagine sottostante.
Una volta aperta l’applicazione andare su:
- Sketch
- Import Library
- Add library
- ricercare ControlP5
Codice
Prima di compilare e caricare il codice dobbiamo cambiare i valori di:
- Ssid_router: inserendo il nome del nostro router
- password_router: inserendo la password del router
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
#include <WiFi.h> #define port 80 const char *ssid_Router = "insertname"; //input your wifi name const char *password_Router = "insertPw"; //input your wifi passwords WiFiServer server(port); void setup() { Serial.begin(115200); Serial.printf("\nConnecting to "); Serial.println(ssid_Router); WiFi.disconnect(); WiFi.begin(ssid_Router, password_Router); delay(1000); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected."); Serial.print("IP address: "); Serial.println(WiFi.localIP()); Serial.printf("IP port: %d\n",port); server.begin(port); WiFi.setAutoConnect(true); WiFi.setAutoReconnect(true); } void loop(){ WiFiClient client = server.available(); // listen for incoming clients if (client) { // if you get a client, Serial.println("Client connected."); while (client.connected()) { // loop while the client's connected if (client.available()) { // if there's bytes to read from the client, Serial.println(client.readStringUntil('\n')); // print it out the serial monitor while(client.read()>0); // clear the wifi receive area cache } if(Serial.available()){ // if there's bytes to read from the serial monitor, client.print(Serial.readStringUntil('\n')); // print it out the client. while(Serial.read()>0); // clear the wifi receive area cache } } client.stop(); // stop the client connecting. Serial.println("Client Disconnected."); } } |
Compila e carica il codice sulla scheda. Una volta eseguita tale operazione aprire il monitor seriale e impostare il baud rate a 115200. Osserviamo qual è l’indirizzo IP del nostro router.
Se si hanno problemi prova a riavviare la scheda tramite l’apposito pulsante.
Apriamo processing e copiamo e incolliamo il seguente codice.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
import controlP5.*; import processing.net.*; ControlP5 cp5; //Println console; Server myServer; Client myClient; int dataIn=0; int radioFlag1=0; int radioFlag2=0; int send_flag=1; void setup() { size(600,400); smooth(); noStroke(); cp5 = new ControlP5(this); cp5.addTab("default") .activateEvent(true) .setHeight(30) .setWidth(100) .setLabel("TCP Server") .setId(1) ; cp5.getTab("TCP Client") .activateEvent(true) .setHeight(30) .setWidth(100) .setId(2) ; cp5.addTextfield("Local IP") .setPosition(20,40) .setSize(160,40) .setFont(createFont("微软雅黑 Light",20)) .setColor(color(255,255,0)) .setColorLabel(color(0)) .setColorBackground(color(100,255)) .moveTo("default") ; cp5.addTextfield("Local PORT") .setPosition(20,120) .setSize(160,40) .setFont(createFont("微软雅黑 Light",20)) .setColor(color(255,255,0)) .setColorLabel(color(0)) .setColorBackground(color(100,255)) .setText("8888") .moveTo("default") ; cp5.addRadioButton("connect1") .setPosition(20,200) .setSize(100,25) .addItem("Listening", 1) .setColorLabel(color(0)) .moveTo("default") ; cp5.addTextfield("Remote IP") .setPosition(20,40) .setSize(160,40) .setFont(createFont("微软雅黑 Light",20)) .setColor(color(255,255,0)) .setColorLabel(color(0)) .setColorBackground(color(100,255)) .setText("192.168.1.xxx") .moveTo("TCP Client") ; cp5.addTextfield("Remote PORT") .setPosition(20,120) .setSize(160,40) .setFont(createFont("微软雅黑 Light",20)) .setColor(color(255,255,0)) .setColorLabel(color(0)) .setColorBackground(color(100,255)) .setText("80") .moveTo("TCP Client") ; cp5.addRadioButton("connect2") .setPosition(20,200) .setSize(100,25) .addItem("connect Server",1) .setColorLabel(color(0)) .moveTo("TCP Client") ; cp5.addTextarea("recvData") .setPosition(200,40) .setSize(350,150) .setFont(createFont("微软雅黑 Light",20)) .setColor(color(255,255,0)) .setColorBackground(color(100,255)) .scroll(15) .setColorForeground(color(0,100)) .moveTo("global") ; cp5.addTextfield("sendData") .setPosition(200,230) .setSize(350,80) .setFont(createFont("微软雅黑 Light",20)) .setColor(color(255,255,0)) .setLabel("") .setFocus(true) .setColorBackground(color(100,255)) .setColorForeground(color(0,100)) .moveTo("global") ; cp5.addButton("clearRecv") .setValue(0) .setPosition(200,200) .setSize(100,20) .setColorLabel(color(255,100)) .moveTo("global") ; cp5.addButton("clearSend") .setValue(0) .setPosition(200,320) .setSize(100,20) .setColorLabel(color(255,100)) .moveTo("global") ; cp5.addButton("Send") .setValue(0) .setPosition(450,320) .setSize(100,20) .plugTo(this,"send_Textfield_SendData") .setColorLabel(color(255,100)) .moveTo("global") ; cp5.get(Textfield.class,"Local IP").setText(Server.ip()); } void draw(){ background(220); if(radioFlag1==1){ Client thisClient = myServer.available(); if (thisClient !=null) { String whatClientSaid = thisClient.readString(); if (whatClientSaid != null) { cp5.get(Textarea.class,"recvData").append(thisClient.ip()+": "); cp5.get(Textarea.class,"recvData").append(whatClientSaid+"\n"); } } } // myServer.active() if(radioFlag2==1){ if (myClient.available() > 0) { String whatClientSaid = myClient.readString(); if (whatClientSaid != null) { cp5.get(Textarea.class,"recvData").append(cp5.get(Textfield.class,"Remote IP").getText()+": "); cp5.get(Textarea.class,"recvData").append(whatClientSaid+"\n"); } } } } void controlEvent(ControlEvent theControlEvent) { if (theControlEvent.isTab()) { if(theControlEvent.getTab().getId()==1){ cp5.get(Textarea.class,"recvData").clear(); cp5.get(Textfield.class,"sendData").clear(); send_flag=1; } else if(theControlEvent.getTab().getId()==2){ cp5.get(Textarea.class,"recvData").clear(); cp5.get(Textfield.class,"sendData").clear(); send_flag=2; } } } void connect1(int a) { println("a radio Button event: "+a); radioFlag1=a; if(radioFlag1==1){ String port_buffer = cp5.get(Textfield.class,"Local PORT").getText(); int port = int(port_buffer); myServer = new Server(this,port); println(Server.ip()); cp5.get(Textfield.class,"Local IP").setText(Server.ip()); println(port); } else myServer.stop(); } void connect2(int a) { println("a radio Button event: "+a); radioFlag2=a; if(radioFlag2==1){ String port_buffer = cp5.get(Textfield.class,"Remote PORT").getText(); String IP_buffer = cp5.get(Textfield.class,"Remote IP").getText(); int port = int(port_buffer); if(IP_buffer.compareTo("192.168.1.xxx")==0){ println("connect error!"); } else{ myClient = new Client(this,IP_buffer,port); println("connect success!"); } } else myClient.stop(); } void clearRecv(){ cp5.get(Textarea.class,"recvData").clear(); } void clearSend(){ cp5.get(Textfield.class,"sendData").clear(); } void send_Textfield_SendData(){ if(send_flag==1){ myServer.write(cp5.get(Textfield.class,"sendData").getText()); cp5.get(Textfield.class,"sendData").clear(); } else if(send_flag==2){ myClient.write(cp5.get(Textfield.class,"sendData").getText()); cp5.get(Textfield.class,"sendData").clear(); } } |
Avviamo il codice e si aprirà un pop-up. Andiamo su TCP-CLIENT e inseriamo l’indirizzo IP del nostro router che abbiamo trovato prima su Arduino IDE.
Clicchiamo su Connect Server e ora possiamo scambiare messaggi tra ESP32 e PC (usando il monitor seriale di Arduino IDE).
Iscriviti ai nostri gruppi Telegram
Link utili