Skip to content

Instantly share code, notes, and snippets.

@charlesrg
Created July 13, 2021 17:15
Show Gist options
  • Save charlesrg/425ec526a05566cceadcebe78860611d to your computer and use it in GitHub Desktop.
Save charlesrg/425ec526a05566cceadcebe78860611d to your computer and use it in GitHub Desktop.
ESP32 Touch Capacitive with WIFI OTA and sending readings over UDP
#include <WiFi.h>
#include <ESPmDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
const char* ssid = "WIFI_SSID";
const char* password = "WIFI_PASSWORD";
const char * udpAddress = "192.168.10.6"; //IP TO SEND UDP Packets with Reading. (UDP so there is no need of a connection state)
const int udpPort = 44444;
WiFiUDP udp;
//variabls for blinking an LED with Millis
const int led = 2; // ESP32 Pin to which onboard LED is connected
unsigned long previousMillis = 0; // will store last time LED was updated
const long interval = 1000; // interval at which to blink (milliseconds)
int ledState = LOW; // ledState used to set the LED
void setup() {
pinMode(led, OUTPUT);
Serial.begin(115200);
Serial.println("Booting");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("Connection Failed! Rebooting...");
delay(5000);
ESP.restart();
}
// Port defaults to 3232
// ArduinoOTA.setPort(3232);
// Hostname defaults to esp3232-[MAC]
// ArduinoOTA.setHostname("myesp32");
// No authentication by default
// ArduinoOTA.setPassword("admin");
// Password can be set with it's md5 value as well
// MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
// ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");
ArduinoOTA
.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH)
type = "sketch";
else // U_SPIFFS
type = "filesystem";
// NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
Serial.println("Start updating " + type);
})
.onEnd([]() {
Serial.println("\nEnd");
})
.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
})
.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
else if (error == OTA_END_ERROR) Serial.println("End Failed");
});
ArduinoOTA.begin();
Serial.println("Ready");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
udp.begin(udpPort);
}
void loop() {
ArduinoOTA.handle();
//loop to blink without delay
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
ledState = not(ledState);
// set the LED with the ledState of the variable:
digitalWrite(led, ledState);
Serial.println(touchRead(T0)); // get value using T0
//data will be sent to server
uint8_t buffer[50] = "Reading: \n";
char cstr[50];
sprintf_P(cstr, (PGM_P)F("T0 Level: %d, T3 Level %d.\n"),touchRead(T0),touchRead(T3));
//send hello world to server
udp.beginPacket(udpAddress, udpPort);
//udp.write(buffer,sizeof(buffer) );
//udp.print(touchRead(T0));
udp.print(cstr);
udp.endPacket();
memset(buffer, 0, 50);
}
}
//This code gave 23 levels without grounded strip and 29 levels grounded
@sohocs509
Copy link

I watched your YouTube video on this. Looks like wires are just connecting from the esp32. Is that correct? Have you tried it on thicker plastic? Say like a 55 gallon drum? Have you tried using the aluminum/metal duct tape? I am very curious.

@charlesrg
Copy link
Author

I watched your YouTube video on this. Looks like wires are just connecting from the esp32. Is that correct? Have you tried it on thicker plastic? Say like a 55 gallon drum? Have you tried using the aluminum/metal duct tape? I am very curious.

Yes, wires straight to ESP32. I tried it on a Home Depot bucket with the copper tape and it worked as well.

@sohocs509
Copy link

sohocs509 commented May 16, 2022 via email

@Rmdhn1
Copy link

Rmdhn1 commented May 21, 2022

how did you guys get the range up to 700 on arduino ide??

@mavenius
Copy link

Hello,

Thank you for your post. I am trying to run this code directly from my pc and not through a wireless adapter. Will it work? Also, I cant find the ESPmDNS on the library manager. Any suggestions? I however found MDNS_Generic. Is that the same by any chance?

Thank you for your time.

Edit: So I solved this problem by manually adding the ESPmDNS library from https://github.com/espressif/arduino-esp32/tree/master/libraries/ESPmDNS

Now I have this error

Arduino: 1.8.19 (Windows 7), Board: "Arduino Uno"
In file included from C:\Users*********\Desktop\sketch_dec27a\sketch_dec27a.ino:2:0:
C:\Users**********\Documents\Arduino\libraries\ESPmDNS\src/ESPmDNS.h:45:10: fatal error: IPv6Address.h: No such file or directory
#include "IPv6Address.h"

      ^~~~~~~~~~~~~~~

compilation terminated.
exit status 1
Error compiling for board Arduino Uno.
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Any help is appreciated.

Thank you

This might be too late for you, but I'll chime in, in case anyone else is curious: I assume you're getting the error because an arduino Uno doesn't have a wifi module onboard, whereas an esp32 does.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment