#include <WiFi.h>
#include <PubSubClient.h>
#include <LiquidCrystal_I2C.h>
#include <ThingSpeak.h>
long myChannelNumber = 2770711;
const char * myWriteAPIKey = "ZFRFXYC5JCVSOD93";
// WiFi
const char *ssid = "Wokwi-GUEST"; // Enter your Wi-Fi name
const char *password = ""; // Enter Wi-Fi password
// MQTT Broker
const char *mqtt_broker = "broker.emqx.io";
const char *topic = "/water vending/machine/123";
const char *mqtt_username = "emqx";
const char *mqtt_password = "public";
const int mqtt_port = 1883;
#define BUTTON_PIN 12 // GIOP12 pin connected to button
int button_state; // the current state of button
int last_button_state; // the previous state of button
#define MOTOR1 34
#define MOTOR2 35
#define SPEAKER 18
int count = 0;
WiFiClient espClient;
PubSubClient client(espClient);
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
// Set software serial baud to 115200;
Serial.begin(115200);
pinMode(SPEAKER, OUTPUT);
digitalWrite(SPEAKER, LOW);
pinMode(MOTOR1, OUTPUT);
pinMode(MOTOR2, OUTPUT);
digitalWrite(MOTOR1, HIGH);
digitalWrite(MOTOR2, HIGH);
pinMode(BUTTON_PIN, INPUT_PULLUP);
button_state = digitalRead(BUTTON_PIN);
lcd.init();
lcd.clear();
lcd.backlight();
lcd.setCursor(1,0); //Set cursor to character 2 on line 0
lcd.print("Connecting to");
lcd.setCursor(1,1); //Set cursor to character 2 on line 0
lcd.print("Internet...");
// Connecting to a WiFi network
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the Wi-Fi network");
//connecting to a mqtt broker
client.setServer(mqtt_broker, mqtt_port);
while (!client.connected()) {
String client_id = "esp32-client-";
client_id += String(WiFi.macAddress());
Serial.printf("The client %s connecting to the public MQTT broker.....\n", client_id.c_str());
if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
Serial.println("Public EMQX MQTT broker connected");
} else {
Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
lcd.clear();
lcd.setCursor(1,0); //Set cursor to character 2 on line 0
lcd.print("please insert coin");
lcd.setCursor(1,1); //Move cursor to character 2 on line 1
lcd.print("0");
// client.publish(topic, "1");
}
void loop() {
client.loop();
last_button_state = button_state; // save the last state
button_state = digitalRead(BUTTON_PIN); // read new state
if (last_button_state == HIGH && button_state == LOW) {
Serial.println("The button is pressed, ");
count += 1;
lcd.setCursor(1,1);
lcd.print(" ");
delay(10);
lcd.setCursor(1,1);
lcd.print(String(count));
client.publish(topic, "1");
digitalWrite(SPEAKER, HIGH);
digitalWrite(MOTOR1, LOW);
digitalWrite(MOTOR2, LOW);
delay(2000);
digitalWrite(SPEAKER, LOW);
digitalWrite(MOTOR1, HIGH);
digitalWrite(MOTOR2, HIGH);
ThingSpeak.setField(1,MOTOR1);
ThingSpeak.setField(2,MOTOR2);
ThingSpeak.setField(3,SPEAKER);
}
}