Esp32: Skirtumas tarp puslapio versijų
Jump to navigation
Jump to search
(Naujas puslapis: == ESP32-WROOM-32D == 1200px) |
|||
2 eilutė: | 2 eilutė: | ||
[[Vaizdas:ESP32-38 PIN-DEVBOARD.png|1200px]] | [[Vaizdas:ESP32-38 PIN-DEVBOARD.png|1200px]] | ||
+ | |||
+ | === Serial to wifi === | ||
+ | |||
+ | Patogus interfeisas, debuginti nutolusius įrenginius, paprasta kaip du pirštus... | ||
+ | * Perflashiname | ||
+ | * Atresetiname | ||
+ | * Pajungiame UART prie norimo įrenginio naudodami pinus RX (PIN G16) TX (PIN G17) jungiant prie kitų uart įrenginių reikia sumaišyti TX/RX vietomis. Taip pat pajungti GND ir jeigu reikia maitinimą 3V3. | ||
+ | * esp32 prisijungęs prie wifi bus pasiekiamas per mdns kaip '''wifi-serial'''. | ||
+ | * Jungiamės '''telnet <esp32-hostas-wifi-tinkle> 23''' t.y '''telnet wifi-serial 23''' | ||
+ | |||
+ | [https://www.arduino.cc/en/software Arduino IDE] reikia sudiegti papildomus [https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html esp32 boardus], pasirinkti tools > Board > ESP32 Arduino > ESP32 Dev Module. Prijungti esp32 microusb kabeliu ir pasirinkti portą tools > port. Tuomet Sketch > Upload. | ||
+ | |||
+ | Kodas: | ||
+ | <syntaxhighlight lang="c"> | ||
+ | #include "BluetoothSerial.h" | ||
+ | #include <esp_wifi.h> | ||
+ | #include <WiFi.h> | ||
+ | #include <ArduinoOTA.h> | ||
+ | #include <ESPmDNS.h> | ||
+ | #include <esp_task_wdt.h> | ||
+ | |||
+ | |||
+ | #define WDT_TIMEOUT 10 | ||
+ | #define XFER_CHUNK_SIZE 256 | ||
+ | |||
+ | #define SERIAL_TCP_PORT 23 | ||
+ | const char* ssid = "wifi pavadinimas"; | ||
+ | const char* password = "slaptažodis"; | ||
+ | const char* mdns_name = "wifi-serial"; | ||
+ | |||
+ | WiFiServer wifiServer(SERIAL_TCP_PORT); | ||
+ | |||
+ | #define RXD2 16 // G16 | ||
+ | #define TXD2 17 // G17 | ||
+ | |||
+ | |||
+ | void setup() { | ||
+ | Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2); | ||
+ | Serial2.setRxBufferSize(8192); | ||
+ | Serial.begin(115200); | ||
+ | |||
+ | delay(1000); | ||
+ | |||
+ | Serial.println("Configuring WDT..."); | ||
+ | esp_task_wdt_init(WDT_TIMEOUT, true); //enable panic so ESP32 restarts | ||
+ | esp_task_wdt_add(NULL); //add current thread to WDT watch | ||
+ | |||
+ | delay(1000); | ||
+ | |||
+ | WiFi.setHostname(mdns_name); | ||
+ | WiFi.begin(ssid, password); | ||
+ | |||
+ | while (WiFi.status() != WL_CONNECTED) { | ||
+ | delay(1000); | ||
+ | Serial.println("Connecting to WiFi.."); | ||
+ | } | ||
+ | |||
+ | Serial.println("Connected to the WiFi network"); | ||
+ | Serial.println(WiFi.localIP()); | ||
+ | |||
+ | wifiServer.begin(); | ||
+ | |||
+ | if (!MDNS.begin(mdns_name)) { | ||
+ | Serial.println("Error starting mDNS"); | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | delay(500); | ||
+ | ArduinoOTA.begin(); | ||
+ | Serial.println("Done with everything"); | ||
+ | } | ||
+ | |||
+ | |||
+ | int last = millis(); | ||
+ | void loop() { | ||
+ | ArduinoOTA.handle(); | ||
+ | |||
+ | // resetting WDT every 1s | ||
+ | if (millis() - last >= 1000) { | ||
+ | Serial.println("Refreshing..."); | ||
+ | esp_task_wdt_reset(); | ||
+ | last = millis(); | ||
+ | } | ||
+ | WiFiClient client = wifiServer.available(); | ||
+ | if (client) { | ||
+ | while (client.connected()) { | ||
+ | int bytes_sent = 0; | ||
+ | while (client.available() > 0) { | ||
+ | //Serial.println("Receiving data"); | ||
+ | char c = client.read(); | ||
+ | Serial2.write(c); | ||
+ | if (bytes_sent++ > XFER_CHUNK_SIZE) { | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | delay(25); | ||
+ | int bytes_recvd = 0; | ||
+ | while (Serial2.available()) { | ||
+ | //Serial.println("Sending data"); | ||
+ | client.write(Serial2.read()); | ||
+ | if (bytes_recvd++ > XFER_CHUNK_SIZE) { | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | if (millis() - last >= 1000) { | ||
+ | Serial.println("Resetting WDT..."); | ||
+ | esp_task_wdt_reset(); | ||
+ | last = millis(); | ||
+ | } | ||
+ | delay(25); | ||
+ | } | ||
+ | client.stop(); | ||
+ | Serial.println("Client disconnected"); | ||
+ | delay(25); | ||
+ | if (!client.connected()) { | ||
+ | int bytes_recvd = 0; | ||
+ | while (Serial2.available()) { | ||
+ | //Serial.println("Sending data"); | ||
+ | Serial2.read(); | ||
+ | if (bytes_recvd++ > XFER_CHUNK_SIZE) { | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | // Reboot after a disconnect, to get rid of any cruft | ||
+ | while(1); | ||
+ | } | ||
+ | else { // Empty the serial port buffer if there's no client connected | ||
+ | int bytes_recvd = 0; | ||
+ | while (Serial2.available()) { | ||
+ | //Serial.println("Sending data"); | ||
+ | Serial2.read(); | ||
+ | if (bytes_recvd++ > XFER_CHUNK_SIZE) { | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | delay(25); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Nepamirštame kode pakeisti wifi pavadinimo ir slaptažodžio. | ||
+ | |||
+ | Kodo šaltinis [https://github.com/faydr/QMesh-ESP32 čia]. | ||
+ | |||
+ | [[Category:Hardware]] | ||
+ | [[Category:IoT]] | ||
+ | [[Category:ESP32]] | ||
+ | [[Category:Microcontrollers]] |
00:44, 15 kovo 2022 versija
ESP32-WROOM-32D
Serial to wifi
Patogus interfeisas, debuginti nutolusius įrenginius, paprasta kaip du pirštus...
- Perflashiname
- Atresetiname
- Pajungiame UART prie norimo įrenginio naudodami pinus RX (PIN G16) TX (PIN G17) jungiant prie kitų uart įrenginių reikia sumaišyti TX/RX vietomis. Taip pat pajungti GND ir jeigu reikia maitinimą 3V3.
- esp32 prisijungęs prie wifi bus pasiekiamas per mdns kaip wifi-serial.
- Jungiamės telnet <esp32-hostas-wifi-tinkle> 23 t.y telnet wifi-serial 23
Arduino IDE reikia sudiegti papildomus esp32 boardus, pasirinkti tools > Board > ESP32 Arduino > ESP32 Dev Module. Prijungti esp32 microusb kabeliu ir pasirinkti portą tools > port. Tuomet Sketch > Upload.
Kodas:
#include "BluetoothSerial.h"
#include <esp_wifi.h>
#include <WiFi.h>
#include <ArduinoOTA.h>
#include <ESPmDNS.h>
#include <esp_task_wdt.h>
#define WDT_TIMEOUT 10
#define XFER_CHUNK_SIZE 256
#define SERIAL_TCP_PORT 23
const char* ssid = "wifi pavadinimas";
const char* password = "slaptažodis";
const char* mdns_name = "wifi-serial";
WiFiServer wifiServer(SERIAL_TCP_PORT);
#define RXD2 16 // G16
#define TXD2 17 // G17
void setup() {
Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
Serial2.setRxBufferSize(8192);
Serial.begin(115200);
delay(1000);
Serial.println("Configuring WDT...");
esp_task_wdt_init(WDT_TIMEOUT, true); //enable panic so ESP32 restarts
esp_task_wdt_add(NULL); //add current thread to WDT watch
delay(1000);
WiFi.setHostname(mdns_name);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
Serial.println(WiFi.localIP());
wifiServer.begin();
if (!MDNS.begin(mdns_name)) {
Serial.println("Error starting mDNS");
return;
}
delay(500);
ArduinoOTA.begin();
Serial.println("Done with everything");
}
int last = millis();
void loop() {
ArduinoOTA.handle();
// resetting WDT every 1s
if (millis() - last >= 1000) {
Serial.println("Refreshing...");
esp_task_wdt_reset();
last = millis();
}
WiFiClient client = wifiServer.available();
if (client) {
while (client.connected()) {
int bytes_sent = 0;
while (client.available() > 0) {
//Serial.println("Receiving data");
char c = client.read();
Serial2.write(c);
if (bytes_sent++ > XFER_CHUNK_SIZE) {
break;
}
}
delay(25);
int bytes_recvd = 0;
while (Serial2.available()) {
//Serial.println("Sending data");
client.write(Serial2.read());
if (bytes_recvd++ > XFER_CHUNK_SIZE) {
break;
}
}
if (millis() - last >= 1000) {
Serial.println("Resetting WDT...");
esp_task_wdt_reset();
last = millis();
}
delay(25);
}
client.stop();
Serial.println("Client disconnected");
delay(25);
if (!client.connected()) {
int bytes_recvd = 0;
while (Serial2.available()) {
//Serial.println("Sending data");
Serial2.read();
if (bytes_recvd++ > XFER_CHUNK_SIZE) {
break;
}
}
}
// Reboot after a disconnect, to get rid of any cruft
while(1);
}
else { // Empty the serial port buffer if there's no client connected
int bytes_recvd = 0;
while (Serial2.available()) {
//Serial.println("Sending data");
Serial2.read();
if (bytes_recvd++ > XFER_CHUNK_SIZE) {
break;
}
}
}
delay(25);
}
Nepamirštame kode pakeisti wifi pavadinimo ir slaptažodžio.
Kodo šaltinis čia.