最近有點事,一個星期沒有寫博客記錄啦,其實遇到了不少有用的知識和小項目,沒有寫博客記錄慚愧慚愧
廢話不多說,我們進入正題:
這次我們用點燈科技來控制舵機的旋轉
使用的還是我們的Arduino IDE,硬件的需求有esp8266 nodemcu以及一個舵機
1、爲Arduino IDE添加點燈科技的庫文件,具體操作看文章:
小愛同學脫離局域網遠程控制開關?
2、上代碼:
#include <Servo.h>
#define BLINKER_WIFI
#include <Blinker.h>
char auth[] = ""; //key
char ssid[] = ""; //wifi名稱
char pswd[] = ""; //wifi密碼
// 新建組件對象
BlinkerButton Button1("btn-max"); //位置1 按鈕 數據鍵名
BlinkerButton Button2("btn-min"); //位置2 按鈕 數據鍵名
BlinkerButton Button3("btn-pw"); //循環模式 按鈕 數據鍵名 開關模式
Servo myservo;
BlinkerSlider Slider1("max-num"); //位置1 滑塊 數據鍵名 範圍1-180
BlinkerSlider Slider2("min-num"); //位置2 滑塊 數據鍵名 範圍1-180
BlinkerSlider Slider3("ser-num"); //實時位置 滑塊 數據鍵名 範圍1-180
BlinkerSlider Slider4("time-num"); //循環模式間隔時間 滑塊 數據鍵名 範圍單位毫秒
bool xunhuan_mode = false;
int servo_max,servo_min,ser_num,time_num;
void button1_callback(const String & state) { //位置1按鈕
BLINKER_LOG("get button state: ", servo_max);
myservo.write(servo_max);
Blinker.vibrate();
}
void button2_callback(const String & state) { //位置2按鈕
BLINKER_LOG("get button state: ", servo_min);
myservo.write(servo_min);
Blinker.vibrate();
}
void button3_callback(const String & state) { //位置3按鈕 開關模式
// Blinker.vibrate();
if(state == "on"){
xunhuan_mode = true;
Button3.print("on");
Blinker.delay(100);
}else if (state == "off"){
xunhuan_mode = false;
Button3.print("off");
Blinker.delay(100);
}
}
void slider1_callback(int32_t value)
{
servo_max = value;
Slider1.color("#1E90FF");
Slider1.print();
BLINKER_LOG("get slider value: ", value);
}
void slider2_callback(int32_t value)
{
servo_min = value;
Slider2.color("#FFF8DC");
Slider2.print();
BLINKER_LOG("get slider value: ", value);
}
void slider3_callback(int32_t value)
{
ser_num = value;
myservo.write(ser_num);
Blinker.delay(100);
BLINKER_LOG("get slider value: ", value);
}
void slider4_callback(int32_t value)
{
time_num = value;
Blinker.delay(100);
BLINKER_LOG("get slider value: ", value);
}
void xunhuan(){
myservo.write(servo_max);
Blinker.delay(time_num/2);
myservo.write(servo_min);
Blinker.delay(time_num/2);
}
void setup() {
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
Blinker.begin(auth, ssid, pswd);
Button1.attach(button1_callback);
Button2.attach(button2_callback);
Button3.attach(button3_callback);
Slider1.attach(slider1_callback);
Slider2.attach(slider2_callback);
Slider3.attach(slider3_callback);
Slider4.attach(slider4_callback);
myservo.attach(5); //servo.attach():設置舵機數據引腳
myservo.write(10); //servo.write():設置轉動角度
servo_max=70;
servo_min=120;
time_num=500;
}
void loop() {
Blinker.run();
if(xunhuan_mode==true){
xunhuan();
}
}
這裏說一下Servo庫
attach()
描述
將Servo變量附加到引腳,注意:在Arduino 0016及之前的版本上,Servo庫僅支持將舵機連接至第9和第10腳上。
語法
servo.attach(pin)
servo.attach(pin, min, max)
參數說明
servo,一個類型爲servo的變量
pin,連接至舵機的引腳編號
min(可選),舵機爲最小角度(0度)時的脈衝寬度,單位爲微秒,默認爲544
max(可選),舵機爲最大角度(180度時)的脈衝寬度,單位爲微秒,默認爲2400write()
描述
向舵機寫入一個數值,來直接控制舵機的軸。在一個標準的舵機中,這將設定齒輪的角度,將齒輪轉到對應的位置。在一個連續旋轉的舵機中,這將設置一個舵機的角度(0作爲全速向一邊,180爲全速向另一邊,在90附近的值爲停止)。
語法
servo.write(angle)
參數說明
servo,一個類型爲servo的變量
angle,寫向舵機的角度,從0到180之間
然後這裏設置的是GPIO引腳,而我們esp8266並沒有標明GPIO編號
我們按照下面編號對應表進行設置:
所以我們設置的GPIO5就是我們的D1端口
接下來進行燒錄,硬件連接
這裏再說一下我們的舵機接線問題:
在我手上的小舵機有三根線:棕色、紅色以及黃色
黃色線爲數據線,接我們數據引腳D1
紅色爲正極:接正極供電
棕色爲負極:接負極接地
3、點燈科技APP設備的按鈕設置
進入我們的設備
以下是我設置好的按鈕和滑塊:
可以看到有三個按鈕,四個滑塊,具體怎麼設置呢?
三個按鈕我們都以下爲模板設置:
數據鍵名和文本名稱都在我們代碼頭部註釋了,大家注意一下。
可以看到我設置的鍵名爲btn-max,文本名稱爲位置1。
以及我們的位置2和循環模式都是這樣設置的
接下來我們設置滑塊:
我們一共有4個滑塊,其中位置1、位置2以及實時位置的設置是一模一樣的:
我們設置對應的文本名稱以及鍵名,最小值爲0,最大值爲180,代表舵機轉動的角度
我這裏再說一下最後一個,循環時間的滑塊設置,其實和前面三個滑塊的設置一樣,設置文本名稱以及對應的數據鍵名。但是,這裏的最大值最小值可以根據自己的需求來的,它代表的是循環的間隔時間,單位爲毫秒。我設置了0-2000,最大的時候間隔時間爲2000毫秒。
4、我們上電開機:
一開始我們可以看到舵機復位到初始位置
設備在線以後我們進入我們設置好的控制界面
將位置2的滑塊設置到一下位置,再點擊位置2的按鈕,可以看到舵機轉動了
剩下的按鈕及功能大家自己去慢慢嘗試吧