ภาพบอร์ดESP32 Devkit V1
Code QC Lotus ESP32 Devkit v1.0
//////// ผนวกไลบรารี่ ////////////
#include <Arduino.h>
#include<ArduinoJson.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <ESP32Servo.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 OLED(-1);
// Update these with values suitable for your network.
const char* ssid = "BJHome2G";
const char* password = "123456789";
// Config MQTT Server
#define mqtt_server "192.168.1.15"
#define mqtt_port 1883
#define mqtt_user "user"
#define mqtt_password "123456"
WiFiClient espClient;
PubSubClient client(espClient);
//////////Sound buzzer์///////////
int snd = 18;
//////// set io ///////////////////
int button = 27; ///button
int k_nob = 35 ; // K-nob
#define LED_PIN_A 14
#define LED_PIN_B 12
#define LED_PIN_C 23
#define LED_PIN_D 19
int ss1 = 32; // servo ch1
int ss2 = 33; // servo ch2
int ss3 = 34; // servo ch3
Servo sv1;
Servo sv2;
Servo sv3;
///////////////////////////////////////////
////////// variable motor port/////////////
#define DR1 16
#define DR2 17
#define PWMR 4
/////////////////////////////////
#define DL1 2
#define DL2 15
#define PWML 13
/////////////////////////////////
void setup() {
OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C); // address i2c 0x3C (for the 128x64)
pinMode(button , INPUT);
//////// Motor OUTPUT /////////
pinMode(DL1, OUTPUT);
pinMode(DL2, OUTPUT);
pinMode(PWML, OUTPUT);
pinMode(DR1, OUTPUT);
pinMode(DR2, OUTPUT);
pinMode(PWMR, OUTPUT);
////// Servo set ////////////
sv1.attach(ss1);
sv2.attach(ss2);
sv3.attach(ss3);
sv_set();
tone(snd, 800, 100); tone(snd, 1000, 100); tone(snd, 800, 100);
}
void run(int spl, int spr) // ประกาศฟังก์ชัน run(กำลังมอเตอร์ซ้าาย,กำลังมอเตอร์ขวา);
{
if (spl > 0)
{
digitalWrite(DL1, LOW);
digitalWrite(DL2, HIGH);
analogWrite(PWML, spl);
}
else if (spl < 0)
{
digitalWrite(DL1, HIGH);
digitalWrite(DL2, LOW);
analogWrite(PWML, -spl);
}
else
{
digitalWrite(DL1, HIGH);
digitalWrite(DL2, HIGH);
}
//////////////////////////////////////
if (spr > 0)
{
digitalWrite(DR1, LOW);
digitalWrite(DR2, HIGH);
analogWrite(PWMR, spr);
}
else if (spr < 0)
{
digitalWrite(DR1, HIGH);
digitalWrite(DR2, LOW);
analogWrite(PWMR, -spr);
}
else
{
digitalWrite(DR1, HIGH);
digitalWrite(DR2, HIGH);
}
}
void loop() {
int sw = digitalRead(button); // set sw = button
int nob = analogRead(k_nob); // variable nob = k_nob
int menu = map(nob, 0, 4095, 0, 12); // mab nob 0-4095 to 0-12
OLED.clearDisplay(); //clear oled
OLED.setTextColor(WHITE, BLACK); //set color
OLED.setCursor(0, 0); // set cursor position
OLED.setTextSize(2); // set text size 2 point
OLED.print(" "); // space text
OLED.println(menu); // display menu 0 to 12
OLED.setTextSize(1); // set text size 1 point
OLED.println(" LOTUS ARDUIBOT"); // display LOTUS ARDUIBOT
OLED.print(" "); // space text
OLED.print(nob); // display nob
OLED.println(" TEST"); // display TEST
OLED.setTextSize(2); // set text size 2 point
///////////////////////////////////////////////////////////////
if ((menu == 0))
{
}
if ((menu == 1))
{ OLED.println(" SERVO123");
}
if ((menu == 2))
{ OLED.println(" MOTOR");
}
if ((menu == 3))
{
OLED.println(" SOUND");
}
if ((menu == 4))
{
OLED.println(" MQTT");
}
if ((menu == 5))
{
OLED.println(" Digi Out");
}
if ((sw == 0) and (menu == 6))
{
}
if ((sw == 0) and (menu == 7))
{
}
if ((sw == 0) and (menu == 8))
{
}
if ((sw == 0) and (menu == 9))
{
}
if ((sw == 0) and (menu == 10))
{
}
if ((sw == 0) and (menu == 11))
{
}
if ((sw == 0) and (menu == 12))
{
}
//////////////////////////////////////////////////////////////
OLED.display();
if ((sw == 0) and (menu == 0))
{ tone(snd, 800, 100);
}
if ((sw == 0) and (menu == 1))
{
tone(snd, 800, 100); menu1();
}
if ((sw == 0) and (menu == 2))
{
tone(snd, 800, 100); menu2();
}
if ((sw == 0) and (menu == 3))
{
tone(snd, 800, 100); menu3();
}
if ((sw == 0) and (menu == 4))
{
tone(snd, 800, 100); menu4();
}
if ((sw == 0) and (menu == 5))
{
tone(snd, 800, 100); menu5();
}
if ((sw == 0) and (menu == 6))
{
tone(snd, 800, 100); menu6();
}
if ((sw == 0) and (menu == 7))
{
tone(snd, 800, 100); menu7();
}
if ((sw == 0) and (menu == 8))
{
tone(snd, 800, 100); menu8();
}
if ((sw == 0) and (menu == 9))
{
tone(snd, 800, 100); menu9();
}
if ((sw == 0) and (menu == 10))
{
tone(snd, 800, 100); menu10();
}
if ((sw == 0) and (menu == 11))
{
tone(snd, 800, 100); menu11();
}
if ((sw == 0) and (menu == 12))
{
tone(snd, 800, 100); menu12();
}
delay(100);
}
void motor()
{ //-------------- forward-------------- //
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 0);
OLED.setTextSize(2);
OLED.println(" ML MR");
OLED.println(" F F");
OLED.setTextSize(1);
OLED.println(" -------------------");
OLED.setTextSize(2);
OLED.println(" FORWARD");
OLED.display();
run(100, 100); delay(1000); tone(3, 1000, 500);
//-------------- back ward-------------- //
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 0);
OLED.setTextSize(2);
OLED.println(" ML MR");
OLED.println(" B B");
OLED.setTextSize(1);
OLED.println(" -------------------");
OLED.setTextSize(2);
OLED.println(" BACK");
OLED.display();
run(-100, -100); delay(2000); tone(3, 1000, 500);
//------------------ trun left-----------------------------//
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 0);
OLED.setTextSize(2);
OLED.println(" ML MR");
OLED.println(" B F");
OLED.setTextSize(1);
OLED.println(" -------------------");
OLED.setTextSize(2);
OLED.println(" LEFT");
OLED.display();
run(-100, 100); delay(2000); tone(3, 1000, 500);
//------------------turn right-----------------------------//
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 0);
OLED.setTextSize(2);
OLED.println(" ML MR");
OLED.println(" F B");
OLED.setTextSize(1);
OLED.println(" -------------------");
OLED.setTextSize(2);
OLED.println(" RIGHT");
OLED.display();
run(100, -100); delay(2000); tone(3, 1000, 500);
//------------------- stop motor----------------------------//
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 0);
OLED.setTextSize(2);
OLED.println(" ML MR");
OLED.println(" 0 0");
OLED.setTextSize(1);
OLED.println(" -------------------");
OLED.setTextSize(2);
OLED.println(" STOP");
OLED.display();
run(0, 0); delay(2000); tone(3, 1000, 500);
}
void sv_knob() {
while (true) {
int vr = analogRead(A7);
int nob = map(vr, 0, 4095, 0, 180);
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 0);
OLED.setTextSize(2);
OLED.print("SV1 = ");
OLED.println(nob);
OLED.print("SV2 = ");
OLED.println(nob);
OLED.print("SV3 = ");
OLED.println(nob);
OLED.display();
sv1.write(nob);
sv2.write(nob);
sv3.write(nob);
delay(50);
}
}
/////////////////////////////////////////////////////
void sv_set() {
sv1.write(40);
}
////////////////////////////////////////////////////
void sound() {
tone(snd, 660, 100);
delay(150);
tone(snd, 660, 100);
delay(300);
tone(snd, 660, 100);
delay(300);
tone(snd, 510, 100);
delay(100);
tone(snd, 660, 100);
delay(300);
tone(snd, 770, 100);
delay(550);
tone(snd, 380, 100);
delay(575);
tone(snd, 510, 100);
delay(450);
tone(snd, 380, 100);
delay(400);
tone(snd, 320, 100);
delay(500);
tone(snd, 440, 100);
delay(300);
tone(snd, 480, 80);
delay(330);
tone(snd, 450, 100);
delay(150);
tone(snd, 430, 100);
delay(300);
tone(snd, 380, 100);
delay(200);
tone(snd, 660, 80);
delay(200);
tone(snd, 760, 50);
delay(150);
tone(snd, 860, 100);
delay(300);
tone(snd, 700, 80);
delay(150);
tone(snd, 760, 50);
delay(350);
tone(snd, 660, 80);
delay(300);
tone(snd, 520, 80);
delay(150);
tone(snd, 580, 80);
delay(150);
tone(snd, 480, 80);
delay(500);
tone(snd, 510, 100);
delay(450);
tone(snd, 380, 100);
delay(400);
tone(snd, 320, 100);
delay(500);
tone(snd, 440, 100);
delay(300);
tone(snd, 480, 80);
delay(330);
tone(snd, 450, 100);
delay(150);
tone(snd, 430, 100);
delay(300);
tone(snd, 380, 100);
delay(200);
tone(snd, 660, 80);
delay(200);
tone(snd, 760, 50);
delay(150);
tone(snd, 860, 100);
delay(300);
tone(snd, 700, 80);
delay(150);
tone(snd, 760, 50);
delay(350);
tone(snd, 660, 80);
delay(300);
tone(snd, 520, 80);
delay(150);
tone(snd, 580, 80);
delay(150);
tone(snd, 480, 80);
delay(500);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 150);
delay(300);
tone(snd, 380, 100);
delay(150);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(100);
tone(snd, 570, 100);
delay(220);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 200);
delay(300);
tone(snd, 1020, 80);
delay(300);
tone(snd, 1020, 80);
delay(150);
tone(snd, 1020, 80);
delay(300);
tone(snd, 380, 100);
delay(300);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 150);
delay(300);
tone(snd, 380, 100);
delay(150);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(100);
tone(snd, 570, 100);
delay(420);
tone(snd, 585, 100);
delay(450);
tone(snd, 550, 100);
delay(420);
tone(snd, 500, 100);
delay(360);
tone(snd, 380, 100);
delay(300);
tone(snd, 500, 100);
delay(300);
tone(snd, 500, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 150);
delay(300);
tone(snd, 380, 100);
delay(150);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(100);
tone(snd, 570, 100);
delay(220);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 200);
delay(300);
tone(snd, 1020, 80);
delay(300);
tone(snd, 1020, 80);
delay(150);
tone(snd, 1020, 80);
delay(300);
tone(snd, 380, 100);
delay(300);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 150);
delay(300);
tone(snd, 380, 100);
delay(150);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(100);
tone(snd, 570, 100);
delay(420);
tone(snd, 585, 100);
delay(450);
tone(snd, 550, 100);
delay(420);
tone(9, 500, 100);
delay(360);
tone(snd, 380, 100);
delay(300);
tone(snd, 500, 100);
delay(300);
tone(snd, 500, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 500, 60);
delay(150);
tone(snd, 500, 80);
delay(300);
tone(snd, 500, 60);
delay(350);
tone(snd, 500, 80);
delay(150);
tone(snd, 580, 80);
delay(350);
tone(snd, 660, 80);
delay(150);
tone(snd, 500, 80);
delay(300);
tone(snd, 430, 80);
delay(150);
tone(snd, 380, 80);
delay(600);
tone(snd, 500, 60);
delay(150);
tone(snd, 500, 80);
delay(300);
tone(snd, 500, 60);
delay(350);
tone(snd, 500, 80);
delay(150);
tone(snd, 580, 80);
delay(150);
tone(snd, 660, 80);
delay(550);
tone(snd, 870, 80);
delay(325);
tone(snd, 760, 80);
delay(600);
tone(snd, 500, 60);
delay(150);
tone(snd, 500, 80);
delay(300);
tone(snd, 500, 60);
delay(350);
tone(snd, 500, 80);
delay(150);
tone(snd, 580, 80);
delay(350);
tone(snd, 660, 80);
delay(150);
tone(snd, 500, 80);
delay(300);
tone(snd, 430, 80);
delay(150);
tone(snd, 380, 80);
delay(600);
tone(snd, 660, 100);
delay(150);
tone(snd, 660, 100);
delay(300);
tone(snd, 660, 100);
delay(300);
tone(snd, 510, 100);
delay(100);
tone(snd, 660, 100);
delay(300);
tone(snd, 770, 100);
delay(550);
tone(snd, 380, 100);
delay(575);
}
/////////////// Digital output ///////////
void dt_out_set() {
pinMode( LED_PIN_A, OUTPUT);
pinMode( LED_PIN_B, OUTPUT);
pinMode( LED_PIN_C, OUTPUT);
pinMode( LED_PIN_D, OUTPUT);
}
void dt_out_test() {
while(true){
digitalWrite( LED_PIN_A,HIGH);delay(100);digitalWrite( LED_PIN_A,LOW);delay(100);
digitalWrite( LED_PIN_B,HIGH);delay(100);digitalWrite( LED_PIN_B,LOW);delay(100);
digitalWrite( LED_PIN_C,HIGH);delay(100);digitalWrite( LED_PIN_C,LOW);delay(100);
digitalWrite( LED_PIN_D,HIGH);delay(100);digitalWrite( LED_PIN_D,LOW);delay(100);}
}
void dt_out(){
dt_out_set();dt_out_test() ;
}
void mqtt_set() {
tone(snd, 800, 100); tone(snd, 900, 100); tone(snd, 800, 100); tone(snd, 900, 100); delay(50); tone(snd, 1000, 1000);
OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C); // กำหนดแอดเดรสของพอร์ตจอเป็น 0x3C (for the 128x64)
pinMode(LED_PIN_A, OUTPUT);
pinMode(LED_PIN_B, OUTPUT);
pinMode(LED_PIN_C, OUTPUT);
Serial.begin(115200);
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
digitalWrite(LED_PIN_A, HIGH);
digitalWrite(LED_PIN_B, HIGH);
digitalWrite(LED_PIN_C, HIGH);
delay(2000);
digitalWrite(LED_PIN_A, LOW);
digitalWrite(LED_PIN_B, LOW);
digitalWrite(LED_PIN_C, LOW);
OLED.clearDisplay();
OLED.setCursor(0, 0);
OLED.setTextColor(WHITE, BLACK);
OLED.setTextSize(2);
OLED.println(" WiFi");
OLED.println("Conecting");
OLED.display();
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
tone(snd, 1000, 100); delay(150); tone(snd, 1000, 100); delay(150); tone(snd, 1000, 100);
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 0);
OLED.setTextSize(1);
OLED.println("WiFi connected");
OLED.print("IP : "); OLED.println( WiFi.localIP());
OLED.print("*******************");
OLED.display();
}
void mqtt_loop() {
while (true) {
if (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ESP32Client", mqtt_user, mqtt_password)) {
Serial.println("connected");
client.subscribe("ESP32"); // ESP32 Topic
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
return;
}
}
client.loop();
}
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
String msg = "";
int i = 0;
while (i < length) msg += (char)payload[i++];
if (msg == "GET") {
client.publish("ESP32", (digitalRead(LED_PIN_A) ? "LEDON" : "LEDOFF"));
Serial.println("Send !");
return;
}
// CiRA CORE Mqtt //
const size_t capacity = JSON_OBJECT_SIZE(1); //? Object Size
DynamicJsonDocument doc(capacity); //? Declare variable for store json
deserializeJson(doc, payload, length); //? deserialize JSON
String msg_cira = doc["a"]; //? Store key title to tittle
////////////////////// command mqtt control LED A -C /////////////////////////////////
if ((msg == "AON") or (msg_cira == "AON")) {
digitalWrite(LED_PIN_A, HIGH);
}
if ((msg == "AOFF") or (msg_cira == "AOFF")) {
digitalWrite(LED_PIN_A, LOW);
}
if ((msg == "BON") or (msg_cira == "BON")) {
digitalWrite(LED_PIN_B, HIGH);
}
if ((msg == "BOFF") or (msg_cira == "BOFF")) {
digitalWrite(LED_PIN_B, LOW);
}
if ((msg == "CON") or (msg_cira == "CON")) {
digitalWrite(LED_PIN_C, HIGH);
}
if ((msg == "COFF") or (msg_cira == "COFF")) {
digitalWrite(LED_PIN_C, LOW);
}
// digitalWrite(LED_PIN_A, (msg_cira == "LEDON" ? HIGH : LOW));
////////// Display OLED and Serial ////////////////
Serial.print("msg = "); Serial.println(msg);
Serial.print("msg_cira = "); Serial.println( msg_cira);
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 0);
OLED.setTextSize(1);
OLED.println("WiFi connected");
OLED.print("IP : "); OLED.println( WiFi.localIP());
OLED.print("Topic : "); OLED.println( topic);
OLED.println("-------------------");
OLED.print("msg : "); OLED.println(msg);
OLED.println("-------------------");
OLED.print("msg_cira: "); OLED.println(msg_cira);
OLED.println("-------------------");
OLED.display();
}
//////////////write and use code menu ////////////
void menu1() /// write and use code menu 1
{
sv_knob(); // servo test
}
void menu2() /// write and use code menu
{ motor(); // dc motor test
}
void menu3() /// write and use code menu 3
{ sound(); // sound test
}
void menu4() /// write and use code menu 4
{ mqtt_set(); mqtt_loop();
}
void menu5() /// write and use code menu 5
{dt_out();
}
void menu6() /// write and use code menu 6
{
}
void menu7() /// write and use code menu 7
{
}
void menu8() /// write and use code menu 8
{
}
void menu9() /// write and use code menu 9
{
}
void menu10() /// write and use code menu 10
{
}
void menu11() /// write and use code menu 11
{
}
void menu12() /// write and use code menu 12
{
}
ESP32 Devkit Robot
//////// ผนวกไลบรารี่ ////////////
#include <Arduino.h>
#include<ArduinoJson.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <ESP32Servo.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 OLED(-1);
// Update these with values suitable for your network.
const char* ssid = "BJHome2G";
const char* password = "123456789";
// Config MQTT Server
#define mqtt_server "192.168.1.15"
#define mqtt_port 1883
#define mqtt_user "user"
#define mqtt_password "123456"
WiFiClient espClient;
PubSubClient client(espClient);
//////////Sound buzzer์///////////
int snd = 18;
//////// set io ///////////////////
int button = 27; ///button
int k_nob = 35 ; // K-nob
#define LED_PIN_A 14
#define LED_PIN_B 12
#define LED_PIN_C 23
#define LED_PIN_D 19
int ss1 = 32; // servo ch1
int ss2 = 33; // servo ch2
int ss3 = 5; // servo ch3
Servo sv1;
Servo sv2;
Servo sv3;
///////////////////////////////////////////
////////// variable motor port/////////////
#define DR1 16
#define DR2 17
#define PWMR 4
/////////////////////////////////
#define DL1 2
#define DL2 15
#define PWML 13
/////////////////////////////////
void setup() {
OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C); // address i2c 0x3C (for the 128x64)
pinMode(button , INPUT);
//////// Motor OUTPUT /////////
pinMode(DL1, OUTPUT);
pinMode(DL2, OUTPUT);
pinMode(PWML, OUTPUT);
pinMode(DR1, OUTPUT);
pinMode(DR2, OUTPUT);
pinMode(PWMR, OUTPUT);
////// Servo set ////////////
sv1.attach(ss1);
sv2.attach(ss2);
sv3.attach(ss3);
sv_set();
tone(snd, 800, 100); tone(snd, 1000, 100); tone(snd, 800, 100);
}
void run(int spl, int spr) // ประกาศฟังก์ชัน run(กำลังมอเตอร์ซ้าาย,กำลังมอเตอร์ขวา);
{
if (spl > 0)
{
digitalWrite(DL1, LOW);
digitalWrite(DL2, HIGH);
analogWrite(PWML, spl);
}
else if (spl < 0)
{
digitalWrite(DL1, HIGH);
digitalWrite(DL2, LOW);
analogWrite(PWML, -spl);
}
else
{
digitalWrite(DL1, HIGH);
digitalWrite(DL2, HIGH);
}
//////////////////////////////////////
if (spr > 0)
{
digitalWrite(DR1, LOW);
digitalWrite(DR2, HIGH);
analogWrite(PWMR, spr);
}
else if (spr < 0)
{
digitalWrite(DR1, HIGH);
digitalWrite(DR2, LOW);
analogWrite(PWMR, -spr);
}
else
{
digitalWrite(DR1, HIGH);
digitalWrite(DR2, HIGH);
}
}
void loop() {
int sw = digitalRead(button); // set sw = button
int nob = analogRead(k_nob); // variable nob = k_nob
int menu = map(nob, 0, 4095, 0, 12); // mab nob 0-4095 to 0-12
OLED.clearDisplay(); //clear oled
OLED.setTextColor(WHITE, BLACK); //set color
OLED.setCursor(0, 0); // set cursor position
OLED.setTextSize(2); // set text size 2 point
OLED.print(" "); // space text
OLED.println(menu); // display menu 0 to 12
OLED.setTextSize(1); // set text size 1 point
OLED.println(" LOTUS ARDUIBOT"); // display LOTUS ARDUIBOT
OLED.print(" "); // space text
OLED.print(nob); // display nob
OLED.println(" TEST"); // display TEST
OLED.setTextSize(2); // set text size 2 point
///////////////////////////////////////////////////////////////
if ((menu == 0))
{
}
if ((menu == 1))
{ OLED.println(" SERVO123");
}
if ((menu == 2))
{ OLED.println(" SERVO v2");
}
if ((menu == 3))
{
OLED.println(" SOUND");
}
if ((menu == 4))
{
OLED.println(" MQTT");
}
if ((menu == 5))
{
OLED.println(" Digi Out");
}
if ((sw == 0) and (menu == 6))
{OLED.println(" MOTOR");
}
if ((sw == 0) and (menu == 7))
{
}
if ((sw == 0) and (menu == 8))
{
}
if ((sw == 0) and (menu == 9))
{
}
if ((sw == 0) and (menu == 10))
{
}
if ((sw == 0) and (menu == 11))
{
}
if ((sw == 0) and (menu == 12))
{
}
//////////////////////////////////////////////////////////////
OLED.display();
if ((sw == 0) and (menu == 0))
{ tone(snd, 800, 100);
}
if ((sw == 0) and (menu == 1))
{
tone(snd, 800, 100); menu1();
}
if ((sw == 0) and (menu == 2))
{
tone(snd, 800, 100); menu2();
}
if ((sw == 0) and (menu == 3))
{
tone(snd, 800, 100); menu3();
}
if ((sw == 0) and (menu == 4))
{
tone(snd, 800, 100); menu4();
}
if ((sw == 0) and (menu == 5))
{
tone(snd, 800, 100); menu5();
}
if ((sw == 0) and (menu == 6))
{
tone(snd, 800, 100); menu6();
}
if ((sw == 0) and (menu == 7))
{
tone(snd, 800, 100); menu7();
}
if ((sw == 0) and (menu == 8))
{
tone(snd, 800, 100); menu8();
}
if ((sw == 0) and (menu == 9))
{
tone(snd, 800, 100); menu9();
}
if ((sw == 0) and (menu == 10))
{
tone(snd, 800, 100); menu10();
}
if ((sw == 0) and (menu == 11))
{
tone(snd, 800, 100); menu11();
}
if ((sw == 0) and (menu == 12))
{
tone(snd, 800, 100); menu12();
}
delay(100);
}
void motor()
{ //-------------- forward-------------- //
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 0);
OLED.setTextSize(2);
OLED.println(" ML MR");
OLED.println(" F F");
OLED.setTextSize(1);
OLED.println(" -------------------");
OLED.setTextSize(2);
OLED.println(" FORWARD");
OLED.display();
run(100, 100); delay(1000); tone(3, 1000, 500);
//-------------- back ward-------------- //
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 0);
OLED.setTextSize(2);
OLED.println(" ML MR");
OLED.println(" B B");
OLED.setTextSize(1);
OLED.println(" -------------------");
OLED.setTextSize(2);
OLED.println(" BACK");
OLED.display();
run(-100, -100); delay(2000); tone(3, 1000, 500);
//------------------ trun left-----------------------------//
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 0);
OLED.setTextSize(2);
OLED.println(" ML MR");
OLED.println(" B F");
OLED.setTextSize(1);
OLED.println(" -------------------");
OLED.setTextSize(2);
OLED.println(" LEFT");
OLED.display();
run(-100, 100); delay(2000); tone(3, 1000, 500);
//------------------turn right-----------------------------//
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 0);
OLED.setTextSize(2);
OLED.println(" ML MR");
OLED.println(" F B");
OLED.setTextSize(1);
OLED.println(" -------------------");
OLED.setTextSize(2);
OLED.println(" RIGHT");
OLED.display();
run(100, -100); delay(2000); tone(3, 1000, 500);
//------------------- stop motor----------------------------//
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 0);
OLED.setTextSize(2);
OLED.println(" ML MR");
OLED.println(" 0 0");
OLED.setTextSize(1);
OLED.println(" -------------------");
OLED.setTextSize(2);
OLED.println(" STOP");
OLED.display();
run(0, 0); delay(2000); tone(3, 1000, 500);
}
void sv_knob() {
while (true) {
int vr = analogRead(35);
int nob = map(vr, 0, 4095, 0, 180);
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 0);
OLED.setTextSize(2);
OLED.print("SV1 = ");
OLED.println(nob);
OLED.print("SV2 = ");
OLED.println(nob);
OLED.print("SV3 = ");
OLED.println(nob);
OLED.display();
sv1.write(nob);
sv2.write(nob);
sv3.write(nob);
delay(50);
}
}
void sv_knob2() {
while (true) {
int vr1 = analogRead(14);
int vr2 = analogRead(12);
int vr3 = analogRead(39);
int nob1 = map(vr1, 0, 4095, 0, 180);
int nob2 = map(vr2, 0, 4095, 0, 180);
int nob3 = map(vr3, 0, 4095, 0, 180);
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 0);
OLED.setTextSize(2);
OLED.print("SV1 = ");
OLED.println(nob1);
OLED.print("SV2 = ");
OLED.println(nob2);
OLED.print("SV3 = ");
OLED.println(nob3);
OLED.display();
sv1.write(nob1);
sv2.write(nob2);
sv3.write(nob3);
delay(50);
}
}
/////////////////////////////////////////////////////
void sv_set() {
sv1.write(40);
}
////////////////////////////////////////////////////
void sound() {
tone(snd, 660, 100);
delay(150);
tone(snd, 660, 100);
delay(300);
tone(snd, 660, 100);
delay(300);
tone(snd, 510, 100);
delay(100);
tone(snd, 660, 100);
delay(300);
tone(snd, 770, 100);
delay(550);
tone(snd, 380, 100);
delay(575);
tone(snd, 510, 100);
delay(450);
tone(snd, 380, 100);
delay(400);
tone(snd, 320, 100);
delay(500);
tone(snd, 440, 100);
delay(300);
tone(snd, 480, 80);
delay(330);
tone(snd, 450, 100);
delay(150);
tone(snd, 430, 100);
delay(300);
tone(snd, 380, 100);
delay(200);
tone(snd, 660, 80);
delay(200);
tone(snd, 760, 50);
delay(150);
tone(snd, 860, 100);
delay(300);
tone(snd, 700, 80);
delay(150);
tone(snd, 760, 50);
delay(350);
tone(snd, 660, 80);
delay(300);
tone(snd, 520, 80);
delay(150);
tone(snd, 580, 80);
delay(150);
tone(snd, 480, 80);
delay(500);
tone(snd, 510, 100);
delay(450);
tone(snd, 380, 100);
delay(400);
tone(snd, 320, 100);
delay(500);
tone(snd, 440, 100);
delay(300);
tone(snd, 480, 80);
delay(330);
tone(snd, 450, 100);
delay(150);
tone(snd, 430, 100);
delay(300);
tone(snd, 380, 100);
delay(200);
tone(snd, 660, 80);
delay(200);
tone(snd, 760, 50);
delay(150);
tone(snd, 860, 100);
delay(300);
tone(snd, 700, 80);
delay(150);
tone(snd, 760, 50);
delay(350);
tone(snd, 660, 80);
delay(300);
tone(snd, 520, 80);
delay(150);
tone(snd, 580, 80);
delay(150);
tone(snd, 480, 80);
delay(500);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 150);
delay(300);
tone(snd, 380, 100);
delay(150);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(100);
tone(snd, 570, 100);
delay(220);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 200);
delay(300);
tone(snd, 1020, 80);
delay(300);
tone(snd, 1020, 80);
delay(150);
tone(snd, 1020, 80);
delay(300);
tone(snd, 380, 100);
delay(300);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 150);
delay(300);
tone(snd, 380, 100);
delay(150);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(100);
tone(snd, 570, 100);
delay(420);
tone(snd, 585, 100);
delay(450);
tone(snd, 550, 100);
delay(420);
tone(snd, 500, 100);
delay(360);
tone(snd, 380, 100);
delay(300);
tone(snd, 500, 100);
delay(300);
tone(snd, 500, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 150);
delay(300);
tone(snd, 380, 100);
delay(150);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(100);
tone(snd, 570, 100);
delay(220);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 200);
delay(300);
tone(snd, 1020, 80);
delay(300);
tone(snd, 1020, 80);
delay(150);
tone(snd, 1020, 80);
delay(300);
tone(snd, 380, 100);
delay(300);
tone(snd, 500, 100);
delay(300);
tone(snd, 760, 100);
delay(100);
tone(snd, 720, 100);
delay(150);
tone(snd, 680, 100);
delay(150);
tone(snd, 620, 150);
delay(300);
tone(snd, 650, 150);
delay(300);
tone(snd, 380, 100);
delay(150);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 430, 100);
delay(150);
tone(snd, 500, 100);
delay(100);
tone(snd, 570, 100);
delay(420);
tone(snd, 585, 100);
delay(450);
tone(snd, 550, 100);
delay(420);
tone(9, 500, 100);
delay(360);
tone(snd, 380, 100);
delay(300);
tone(snd, 500, 100);
delay(300);
tone(snd, 500, 100);
delay(150);
tone(snd, 500, 100);
delay(300);
tone(snd, 500, 60);
delay(150);
tone(snd, 500, 80);
delay(300);
tone(snd, 500, 60);
delay(350);
tone(snd, 500, 80);
delay(150);
tone(snd, 580, 80);
delay(350);
tone(snd, 660, 80);
delay(150);
tone(snd, 500, 80);
delay(300);
tone(snd, 430, 80);
delay(150);
tone(snd, 380, 80);
delay(600);
tone(snd, 500, 60);
delay(150);
tone(snd, 500, 80);
delay(300);
tone(snd, 500, 60);
delay(350);
tone(snd, 500, 80);
delay(150);
tone(snd, 580, 80);
delay(150);
tone(snd, 660, 80);
delay(550);
tone(snd, 870, 80);
delay(325);
tone(snd, 760, 80);
delay(600);
tone(snd, 500, 60);
delay(150);
tone(snd, 500, 80);
delay(300);
tone(snd, 500, 60);
delay(350);
tone(snd, 500, 80);
delay(150);
tone(snd, 580, 80);
delay(350);
tone(snd, 660, 80);
delay(150);
tone(snd, 500, 80);
delay(300);
tone(snd, 430, 80);
delay(150);
tone(snd, 380, 80);
delay(600);
tone(snd, 660, 100);
delay(150);
tone(snd, 660, 100);
delay(300);
tone(snd, 660, 100);
delay(300);
tone(snd, 510, 100);
delay(100);
tone(snd, 660, 100);
delay(300);
tone(snd, 770, 100);
delay(550);
tone(snd, 380, 100);
delay(575);
}
/////////////// Digital output ///////////
void dt_out_set() {
pinMode( LED_PIN_A, OUTPUT);
pinMode( LED_PIN_B, OUTPUT);
pinMode( LED_PIN_C, OUTPUT);
pinMode( LED_PIN_D, OUTPUT);
}
void dt_out_test() {
while(true){
digitalWrite( LED_PIN_A,HIGH);delay(100);digitalWrite( LED_PIN_A,LOW);delay(100);
digitalWrite( LED_PIN_B,HIGH);delay(100);digitalWrite( LED_PIN_B,LOW);delay(100);
digitalWrite( LED_PIN_C,HIGH);delay(100);digitalWrite( LED_PIN_C,LOW);delay(100);
digitalWrite( LED_PIN_D,HIGH);delay(100);digitalWrite( LED_PIN_D,LOW);delay(100);}
}
void dt_out(){
dt_out_set();dt_out_test() ;
}
void mqtt_set() {
tone(snd, 800, 100); tone(snd, 900, 100); tone(snd, 800, 100); tone(snd, 900, 100); delay(50); tone(snd, 1000, 1000);
OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C); // กำหนดแอดเดรสของพอร์ตจอเป็น 0x3C (for the 128x64)
pinMode(LED_PIN_A, OUTPUT);
pinMode(LED_PIN_B, OUTPUT);
pinMode(LED_PIN_C, OUTPUT);
Serial.begin(115200);
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
digitalWrite(LED_PIN_A, HIGH);
digitalWrite(LED_PIN_B, HIGH);
digitalWrite(LED_PIN_C, HIGH);
delay(2000);
digitalWrite(LED_PIN_A, LOW);
digitalWrite(LED_PIN_B, LOW);
digitalWrite(LED_PIN_C, LOW);
OLED.clearDisplay();
OLED.setCursor(0, 0);
OLED.setTextColor(WHITE, BLACK);
OLED.setTextSize(2);
OLED.println(" WiFi");
OLED.println("Conecting");
OLED.display();
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
tone(snd, 1000, 100); delay(150); tone(snd, 1000, 100); delay(150); tone(snd, 1000, 100);
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 0);
OLED.setTextSize(1);
OLED.println("WiFi connected");
OLED.print("IP : "); OLED.println( WiFi.localIP());
OLED.print("*******************");
OLED.display();
}
void mqtt_loop() {
while (true) {
if (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ESP32Client", mqtt_user, mqtt_password)) {
Serial.println("connected");
client.subscribe("ESP32"); // ESP32 Topic
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
return;
}
}
client.loop();
}
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
String msg = "";
int i = 0;
while (i < length) msg += (char)payload[i++];
if (msg == "GET") {
client.publish("ESP32", (digitalRead(LED_PIN_A) ? "LEDON" : "LEDOFF"));
Serial.println("Send !");
return;
}
// CiRA CORE Mqtt //
const size_t capacity = JSON_OBJECT_SIZE(1); //? Object Size
DynamicJsonDocument doc(capacity); //? Declare variable for store json
deserializeJson(doc, payload, length); //? deserialize JSON
String msg_cira = doc["a"]; //? Store key title to tittle
////////////////////// command mqtt control LED A -C /////////////////////////////////
if ((msg == "AON") or (msg_cira == "AON")) {
digitalWrite(LED_PIN_A, HIGH);
}
if ((msg == "AOFF") or (msg_cira == "AOFF")) {
digitalWrite(LED_PIN_A, LOW);
}
if ((msg == "BON") or (msg_cira == "BON")) {
digitalWrite(LED_PIN_B, HIGH);
}
if ((msg == "BOFF") or (msg_cira == "BOFF")) {
digitalWrite(LED_PIN_B, LOW);
}
if ((msg == "CON") or (msg_cira == "CON")) {
digitalWrite(LED_PIN_C, HIGH);
}
if ((msg == "COFF") or (msg_cira == "COFF")) {
digitalWrite(LED_PIN_C, LOW);
}
// digitalWrite(LED_PIN_A, (msg_cira == "LEDON" ? HIGH : LOW));
////////// Display OLED and Serial ////////////////
Serial.print("msg = "); Serial.println(msg);
Serial.print("msg_cira = "); Serial.println( msg_cira);
OLED.clearDisplay();
OLED.setTextColor(WHITE, BLACK);
OLED.setCursor(0, 0);
OLED.setTextSize(1);
OLED.println("WiFi connected");
OLED.print("IP : "); OLED.println( WiFi.localIP());
OLED.print("Topic : "); OLED.println( topic);
OLED.println("-------------------");
OLED.print("msg : "); OLED.println(msg);
OLED.println("-------------------");
OLED.print("msg_cira: "); OLED.println(msg_cira);
OLED.println("-------------------");
OLED.display();
}
//////////////write and use code menu ////////////
void menu1() /// write and use code menu 1
{
sv_knob(); // servo test
}
void menu2() /// write and use code menu
{
sv_knob2(); // servo test v2
}
void menu3() /// write and use code menu 3
{ sound(); // sound test
}
void menu4() /// write and use code menu 4
{ mqtt_set(); mqtt_loop();
}
void menu5() /// write and use code menu 5
{dt_out();
}
void menu6() /// write and use code menu 6
{motor(); // dc motor test
}
void menu7() /// write and use code menu 7
{
}
void menu8() /// write and use code menu 8
{
}
void menu9() /// write and use code menu 9
{
}
void menu10() /// write and use code menu 10
{
}
void menu11() /// write and use code menu 11
{
}
void menu12() /// write and use code menu 12
{
}