Điều khiển Servo thông qua NodeMCU ESP8266 và Blynk hiển thị lên OLED 0.96

Điều khiển Servo thông qua NodeMCU ESP8266 và Blynk hiển thị lên OLED 0.96
dieu khien servo thong qua app blynk va esp8266

Trong nội dung bài viết hôm nay mình sẽ hướng dẫn các bạn cách làm thể nào để điều khiển Servo thông qua NodeMCU ESP8266 và App Blynk hiển thị lên OLED 0.96. Để có thể hiểu rõ hơn về bài viết hôm nay các bạn xem lại bài viết bên dưới nhé.

Cấu hình thông số Servo trên App Blynk

Chọn thẻ Slider

  • OUTPUT: VO (0 ~ 1023)
  • DECIMALS: #
  • SEND ON RELEASE & SHOW VALUE: ON

Chọn thẻ Value

  • INPUT: V1 (0 ~ 90)
  • READING RATE: 1 sec

Sơ đồ nguyên lý

nguyen ly servo control

Các linh kiện cần thiết cho dự án

Tên linh kiện Số lượng Shopee
NodeMCU ESP8266 1 Mua ngay
Dây cắm (Đực – Đực) 1 Mua ngay
Dây cắm (Đực – Cái) 1 Mua ngay
OLED 0.96 1 Mua ngay
Servo SG90 1 Mua ngay
Biến trở 100k 1 Mua ngay
Breadboard 1 Mua ngay
Board nguồn (3.3V – 5V) 1 Mua ngay

Code

#define SW_VERSION "ServoCtrlBlynk_V.1" 

/*NodeMCU */
#include <ESP8266WiFi.h>
char ssid [] = "Phamson";
char pass [] = "phamtheson";

/* Blynk */
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
char auth [] = "6zCB6XaSV9PflOIBv7h1uOF7pgUV99t9"; // Servo Control Project // Servo Control Project

/* OLED */
#include "SSD1306Wire.h"
#include "Wire.h"
const int I2C_DISPLAY_ADDRESS = 0x3c;
const int SDA_PIN = 0;
const int SCL_PIN = 2;
SSD1306Wire display(I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN);

/* Servo */
#define servo1Pin D2
#include <Servo.h>
Servo servo1;

/* Initial pot reading and servo position set the position to neutral */
#define potPin A0
int potReading = 1023/2;
int servo1Angle = 90;

/* Reads slider in the Blynk app and writes the value to "potReading" variable */
BLYNK_WRITE(V0) 
{
  potReading = param.asInt();
}

/* Display servo position on Blynk app */
BLYNK_READ(V1) 
{
  Blynk.virtualWrite(V1, servo1Angle);
}

void setup () 
{
  Serial.begin(115200); 
  servo1.attach(servo1Pin);
  displaySetup();
  Blynk.begin(auth, ssid, pass);
}

void loop() 
{
  Blynk.run();
  //PotReading = analogRead(potPin);               // Read Analog data from potenciometer not used here
  servo1Angle = map(potReading, 0, 1023, 0, 180);  // Map the pot reading to an angle from 0 to 180 
  servo1.write(servo1Angle);                       // Move the servo to a position
  displayAngle();
  delay (200);
}

/* Initiate and display setup data on OLED */
void displaySetup()
{
  display.init();         // initialize display
  display.clear();        // Clear display
  display.display();      // Put data on display
}

/*  Display Servo position */
void displayAngle()
{
  display.clear();
  display.setFont(ArialMT_Plain_16);
  display.drawString(10, 0, "Servo Control");
  display.drawString(0, 45, "POSITION:" );
  display.setFont(ArialMT_Plain_24);
  display.drawString(80, 40, String(servo1Angle));
  display.display();
}

Giải thích code

Khai báo Tài khoản và Mật khẩu Wifi.

char ssid [] = "Phamson";
char pass [] = "phamtheson";

Mã Token được cấp khi tạo mới Project trên Blynk.

char auth [] = "6zCB6XaSV9PflOIBv7h1uOF7pgUV99t9";

Đọc giá trị thanh trượt trên App Blynk và ghi giá trị vào biến “potReading”.

BLYNK_WRITE(V0) 
{
  potReading = param.asInt();
}

Hiển thị giá trị Servo trên App Blynk.

BLYNK_READ(V1) 
{
  Blynk.virtualWrite(V1, servo1Angle);
}

Thư viện

Bài viết liên quan

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments