I'm encountering persistent errors with the sample code provided for my smart home kit project. Despite conducting extensive research and troubleshooting efforts, I haven't been able to find a solution. It's becoming increasingly frustrating as each problem I fix seems to be replaced by another. I'd greatly appreciate any assistance in resolving this ongoing issue.
#include <WiFi.h>
#include <ESPmDNS.h>
#include <WiFiClient.h>
#include <Adafruit_NeoPixel.h>
#define LED_PIN 26
// How many NeoPixels are attached to the Arduino?
#define LED_COUNT 4
// Declare our NeoPixel strip object:
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
String item = "0";
const char* ssid = "Temp_Wifi"; //Wifi Name
const char* password = "Temp4"; //Wifif Password
WiFiServer server(80);
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C mylcd(0x27,16,2);
#include <analogWrite.h>
#include "xht11.h"
xht11 xht(17);
//#include <ESP32_Servo.h>
//Servo Wservo;
//Servo Dservo;
#include <ESP32Tone.h>
#define buzzer_pin 25
//#define windowServo 5
//#define doorServo 13
#define waterPin 34
#define fanPin1 19
#define fanPin2 18
#define led_y 12 //Define the yellow led pin to 12
#define waterPin 34
#define gasPin 23
#define pyroelectric 14
unsigned char dht[4] = {0, 0, 0, 0};//Only the first 32 bits of data are received, not the parity bits
//Servo channel
int channel_PWM = 13;
int channel_PWM2 = 10;
int freq_PWM = 50;
int resolution_PWM = 10;
const int PWM_Pin1 = 5;
const int PWM_Pin2 = 13;
void setup() {
Serial.begin(115200);
mylcd.init();
mylcd.backlight();
pinMode(led_y, OUTPUT);
pinMode(fanPin1, OUTPUT);
pinMode(fanPin2, OUTPUT);
ledcSetup(5, 1200, 8);//Set the frequency of LEDC channel 1 to 1200 and PWM resolution to 8, that is duty cycle to 256.
ledcAttachPin(fanPin2, 5); //Bind the LEDC channel 1 to the specified left motor pin GPIO26 for output.
pinMode(waterPin, INPUT);
pinMode(buzzer_pin, OUTPUT);
pinMode(gasPin, INPUT);
pinMode(pyroelectric, INPUT);
ledcSetup(channel_PWM, freq_PWM, resolution_PWM); //Set servo channel and frequency as well as PWM resolution.
ledcSetup(channel_PWM2, freq_PWM, resolution_PWM);
ledcAttachPin(PWM_Pin1, channel_PWM); //Binds the LEDC channel to the specified IO port for output
ledcAttachPin(PWM_Pin2, channel_PWM2); //Binds the LEDC channel to the specified IO port for output
// Wservo.attach(windowServo);
// Dservo.attach(doorServo);
// #if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
// clock_prescale_set(clock_div_1);
// #endif
// // END of Trinket-specific code.
// strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
// strip.show(); // Turn OFF all pixels ASAP
// strip.setBrightness(50); // Set BRIGHTNESS to about 1/5 (max = 255)
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
Serial.println("TCP server started");
MDNS.addService("http", "tcp", 80);
mylcd.setCursor(0, 0);
mylcd.print("ip:");
mylcd.setCursor(0, 1);
mylcd.print(WiFi.localIP()); //LCD displays ip adress
}
void loop() {
WiFiClient client = server.available();
if (!client) {
return;
}
while(client.connected() && !client.available()){
delay(1);
}
String req = client.readStringUntil('\r');
int addr_start = req.indexOf(' ');
int addr_end = req.indexOf(' ', addr_start + 1);
if (addr_start == -1 || addr_end == -1) {
Serial.print("Invalid request: ");
Serial.println(req);
return;
}
req = req.substring(addr_start + 1, addr_end);
item=req;
Serial.println(item);
String s;
if (req == "/") //Browser accesses address can read the information sent by the client.println(s);
{
IPAddress ip = WiFi.localIP();
String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>ESP32 ip:";
s += ipStr;
s += "</html>\r\n\r\n";
Serial.println("Sending 200");
client.println(s); //Send the string S, then you can read the information when visiting the address of E smart home using the browser.
}
if(req == "/led/on") //Browser accesses address ip address/led/on
{
client.println("turn on the LED");
digitalWrite(led_y, HIGH);
}
if(req == "/led/off") //Browser accesses address ip address/led/off
{
client.println("turn off the LED");
digitalWrite(led_y, LOW);
}
if(req == "/window/on")
{
client.println("open the window");
ledcWrite(channel_PWM, 100); //The high level of 20ms is about 2.5ms, that is, 2.5/20*1024, at this time, the servo angle is 180°.
//Wservo.write(175);
}
if(req == "/window/off")
{
client.println("close the window");
ledcWrite(channel_PWM, 60); //The high level of 20ms is about 0.5ms,that is, 0.5/20*1024,at this time, the servo angle is 0°.
//Wservo.write(0);
}
if(req == "/music/on")
{
//client.println("play music");
}
if(req == "/music/off")
{
client.println("play music");
birthday();
noTone(buzzer_pin,0);
}
if(req == "/buz/on")
{
client.println("buzzer");
tone(buzzer_pin,392,250,0);
Serial.println("1");
}
if(req == "/buz/off")
{
client.println("off");
noTone(buzzer_pin,0);
}
if(req == "/door/on")
{
client.println("open the door");
ledcWrite(channel_PWM2, 120);
// Dservo.write(180);
}
if(req == "/door/off")
{
client.println("close the door");
ledcWrite(channel_PWM2, 20);
// Dservo.write(0);
}
if(req == "/fan/on")
{
client.println("turn on the fan");
digitalWrite(fanPin1, LOW); //pwm = 0
ledcWrite(5, 100); //The LEDC channel 1 is bound to the specified left motor output PWM value of 100.
}
if(req == "/fan/off")
{
client.println("turn off the fan");
digitalWrite(fanPin1, LOW); //pwm = 0
ledcWrite(5, 0); //The LEDC channel 1 is bound to the specified left motor output PWM value of 0.
}
if(req == "/red/on")
{
client.println("red on");
colorWipe(strip.Color(255, 0, 0), 50);
}
if(req == "/red/off")
{
client.println("red off");
colorWipe(strip.Color(0, 0, 0), 50);
}
if(req == "/oringe/on")
{
client.println("oringe on");
colorWipe(strip.Color(200, 100, 0), 50);
}
if(req == "/oringe/off")
{
client.println("oringe off");
colorWipe(strip.Color(0, 0, 0), 50);
}
if(req == "/yellow/on")
{
client.println("yellow on");
colorWipe(strip.Color(200, 200, 0), 50);
}
if(req == "/yellow/off")
{
client.println("yellow off");
colorWipe(strip.Color(0, 0, 0), 50);
}
if(req == "/green/on")
{
client.println("green on");
colorWipe(strip.Color(0, 255, 0), 50);
}
if(req == "/green/off")
{
client.println("green off");
colorWipe(strip.Color(0, 0, 0), 50);
}
if(req == "/cyan/on")
{
client.println("cyan on");
colorWipe(strip.Color(0, 100, 255), 50);
}
if(req == "/cyan/off")
{
client.println("cyan off");
colorWipe(strip.Color(0, 0, 0), 50);
}
if(req == "/blue/on")
{
client.println("blue on");
colorWipe(strip.Color(0, 0, 255), 50);
}
if(req == "/blue/off")
{
client.println("blue off");
colorWipe(strip.Color(0, 0, 0), 50);
}
if(req == "/purple/on")
{
client.println("purple on");
colorWipe(strip.Color(100, 0, 255), 50);
}
if(req == "/purple/off")
{
client.println("purple off");
colorWipe(strip.Color(0, 0, 0), 50);
}
if(req == "/white/on")
{
client.println("white on");
colorWipe(strip.Color(255, 255, 255), 50);
}
if(req == "/white/off")
{
client.println("white off");
colorWipe(strip.Color(0, 0, 0), 50);
}
if(req == "/sfx1/on")
{
client.println("sfx1 on");
rainbow(10);
}
if(req == "/sfx1/off")
{
client.println("sfx1 off");
colorWipe(strip.Color(0, 0, 0), 50);
}
if(req == "/sfx2/on")
{
client.println("sfx2 on");
theaterChaseRainbow(50);
}
if(req == "/sfx2/off")
{
client.println("sfx2 off");
colorWipe(strip.Color(0, 0, 0), 50);
}
if(req == "/rain/on")
{
int rainVal = analogRead(waterPin);
client.println(rainVal);
}
if(req == "/rain/off")
{
client.println("off");
}
if(req == "/gas/on")
{
boolean gasVal = analogRead(gasPin);
if(gasVal == 0)
{
client.println("safety");
}
else
{
client.println("dangerous");
}
}
if(req == "/gas/off")
{
client.println("off");
}
if(req == "/body/on")
{
boolean pyroelectric_val = digitalRead(pyroelectric);
if(pyroelectric_val == 1)
{
client.println("someone");
}
else
{
client.println("no one");
}
}
if(req == "/body/off")
{
client.println("off");
}
if(req == "/temp/on")
{
if (xht.receive(dht)) { //Returns true when checked correctly
Serial.print("Temp:");
Serial.print(dht[2]); //The integral part of temperature, DHT [3] is the fractional part
Serial.println("C");
delay(200);
} else { //Read error
Serial.println("sensor error");
}
client.println(dht[2]);
delay(1000); //It takes 1000ms to wait for the device to read
}
if(req == "/temp/off")
{
client.println("off");
}
if(req == "/humidity/on")
{
if (xht.receive(dht)) { //Returns true when checked correctly
Serial.print("Temp:");
Serial.print(dht[0]); //The integral part of temperature, DHT [3] is the fractional part
Serial.println("%");
delay(200);
} else { //Read error
Serial.println("sensor error");
}
client.println(dht[0]);
delay(1000); //It takes 1000ms to wait for the device to read
}
if(req == "/humidity/off")
{
client.println("off");
}
//client.stop();
}
void birthday()
{
tone(buzzer_pin,294,250,0); //The four parameters are pin, frequency, delay and channel
tone(buzzer_pin,440,250,0);
tone(buzzer_pin,392,250,0);
tone(buzzer_pin,532,250,0);
tone(buzzer_pin,494,250,0);
tone(buzzer_pin,392,250,0);
tone(buzzer_pin,440,250,0);
tone(buzzer_pin,392,250,0);
tone(buzzer_pin,587,250,0);
tone(buzzer_pin,532,250,0);
tone(buzzer_pin,392,250,0);
tone(buzzer_pin,784,250,0);
tone(buzzer_pin,659,250,0);
tone(buzzer_pin,532,250,0);
tone(buzzer_pin,494,250,0);
tone(buzzer_pin,440,250,0);
tone(buzzer_pin,698,250,0);
tone(buzzer_pin,659,250,0);
tone(buzzer_pin,532,250,0);
tone(buzzer_pin,587,250,0);
tone(buzzer_pin,532,500,0);
noTone(buzzer_pin,0); //关闭
}
void colorWipe(uint32_t color, int wait) {
for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
strip.setPixelColor(i, color); // Set pixel's color (in RAM)
strip.show(); // Update strip to match
delay(wait); // Pause for a moment
}
}
// Rainbow cycle along whole strip. Pass delay time (in ms) between frames.
void rainbow(int wait) {
for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 256) {
for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
}
strip.show(); // Update strip with new contents
delay(wait); // Pause for a moment
}
}
// Rainbow-enhanced theater marquee. Pass delay time (in ms) between frames.
void theaterChaseRainbow(int wait) {
int firstPixelHue = 0; // First pixel starts at red (hue 0)
for(int a=0; a<30; a++) { // Repeat 30 times...
for(int b=0; b<3; b++) { // 'b' counts from 0 to 2...
strip.clear(); // Set all pixels in RAM to 0 (off)
// 'c' counts up from 'b' to end of strip in increments of 3...
for(int c=b; c<strip.numPixels(); c += 3) {
int hue = firstPixelHue + c * 65536L / strip.numPixels();
uint32_t color = strip.gamma32(strip.ColorHSV(hue)); // hue -> RGB
strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
}
strip.show(); // Update strip with new contents
delay(wait); // Pause for a moment
firstPixelHue += 65536 / 90; // One cycle of color wheel over 90 frames
}
}
}
The current error code I'm encountering during compilation is as follows:
WARNING: library LiquidCrystal_I2C claims to run on avr architecture(s) and may be incompatible with your current board which runs on esp32 architecture(s).
In file included from C:\Users\temp\Downloads\KS5009 Keyestudio Smart Home Kit for ESP32\3. Arduino Tutorials\arduino Code\pj13_2_IoT_smart_home\pj13_2_IoT_smart_home.ino:16:
c:\Users\temp\OneDrive\Documents\Arduino\libraries\Wire\src/Wire.h:44:5: error: 'i2c_t' does not name a type; did you mean 'ino_t'?
i2c_t * i2c;
^~~~~
ino_t
c:\Users\temp\OneDrive\Documents\Arduino\libraries\Wire\src/Wire.h:64:5: error: 'i2c_err_t' does not name a type; did you mean 'esp_err_t'?
i2c_err_t last_error; // @stickBreaker from esp32-hal-i2c.h
^~~~~~~~~
esp_err_t
c:\Users\temp\OneDrive\Documents\Arduino\libraries\Wire\src/Wire.h:87:5: error: 'i2c_err_t' does not name a type; did you mean 'esp_err_t'?
i2c_err_t writeTransmission(uint16_t address, uint8_t* buff, uint16_t size, bool sendStop=true);
^~~~~~~~~
esp_err_t
c:\Users\temp\OneDrive\Documents\Arduino\libraries\Wire\src/Wire.h:88:5: error: 'i2c_err_t' does not name a type; did you mean 'esp_err_t'?
i2c_err_t readTransmission(uint16_t address, uint8_t* buff, uint16_t size, bool sendStop=true, uint32_t *readCount=NULL);
^~~~~~~~~
esp_err_t
Multiple libraries were found for "Wire.h"
Used: C:\Users\temp\OneDrive\Documents\Arduino\libraries\Wire
Not used: C:\Users\temp\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.13\libraries\Wire
exit status 1
Compilation error: exit status 1