FireBeetle 2 ESP32-S3+鱼丸的陪护伙伴(一)
背景

本项目的主人翁就是上图的猫主子——鱼丸了,由于平时工作较忙,白天基本没时间在家,晚上也回来的较晚。每次回家,鱼丸都幽怨的冲着我喵喵叫。
刚好这次DF的活动有幸参与,结合S3带的摄像头,就想来尝试做一个可以远程看到并且能和猫咪进行互动的项目。由于作者能力有限,过程中也遇到了较多的问题,这里也和大家一起分享一下,看看有没有大佬有更好的解决方法。
程序编写:
运动程序比较简单,可以使用Thoony或者ArduinoIDE来编程实现,这里我就用了ArduinoIDE。关于如何在ArduinoIDE中开发ESP32,这里就不赘述了,网上的教程一大堆。
extern int DRV_A = 12;
extern int DRV_B = 13;
extern int DIR_A = 14;
extern int DIR_B = 15;
void Forward() {
digitalWrite(DRV_A, LOW);
digitalWrite(DRV_B, HIGH);
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, HIGH);
}
void Back() {
digitalWrite(DRV_A, HIGH);
digitalWrite(DRV_B, LOW);
digitalWrite(DIR_A, HIGH);
digitalWrite(DIR_B, LOW);
}
void Right() {
digitalWrite(DRV_A, LOW);
digitalWrite(DRV_B, HIGH);
digitalWrite(DIR_A, HIGH);
digitalWrite(DIR_B, LOW);
}
void Left() {
digitalWrite(DRV_A, HIGH);
digitalWrite(DRV_B, LOW);
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, HIGH);
}
void Stop() {
digitalWrite(DRV_A, LOW);
digitalWrite(DRV_B, LOW);
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, LOW);
}
void setup() {
Serial.begin(115200);
pinMode(DRV_A, OUTPUT);
pinMode(DRV_B, OUTPUT);
pinMode(DIR_A, OUTPUT);
pinMode(DIR_B, OUTPUT);
digitalWrite(DRV_A, LOW);
digitalWrite(DRV_B, LOW);
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, LOW);
}
void loop() {
Forward();
delay(1000);
Back();
delay(1000);
Right();
delay(1000);
Left(1000);
delay(1000);
Stop();
delay(5000);
}测试程序二:远程控制
在第一个版本里面,主要和大家探讨一下如何结合blinker这个库来实现手机端远程遥控的功能。有一说一blinker这个库确实很好用,但是我在使用的过程中一直遇到板子不断重启的问题。这里也希望大家能够一起探讨下,出现这种问题都有哪些原因。
这里我们需要对ESP32进行网络连接,并且调用Blinker这个库文件中的WiFi功能。这个功能相对也是很简单,我们只需要对应的功能模块在APP端设置好,然后使用例程进行修改就可以了。

#define BLINKER_WIFI
#include <Blinker.h>
extern int DRV_A = 12;
extern int DRV_B = 13;
extern int DIR_A = 14;
extern int DIR_B = 15;
void Forward() {
digitalWrite(DRV_A, LOW);
digitalWrite(DRV_B, HIGH);
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, HIGH);
}
void Back() {
digitalWrite(DRV_A, HIGH);
digitalWrite(DRV_B, LOW);
digitalWrite(DIR_A, HIGH);
digitalWrite(DIR_B, LOW);
}
void Right() {
digitalWrite(DRV_A, LOW);
digitalWrite(DRV_B, HIGH);
digitalWrite(DIR_A, HIGH);
digitalWrite(DIR_B, LOW);
}
void Left() {
digitalWrite(DRV_A, HIGH);
digitalWrite(DRV_B, LOW);
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, HIGH);
}
void Stop() {
digitalWrite(DRV_A, LOW);
digitalWrite(DRV_B, LOW);
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, LOW);
}
char auth[] = "Your Device Secret Key";
char ssid[] = "Your WiFi network SSID or name";
char pswd[] = "Your WiFi network WPA password or WEP key";
// 新建组件对象
BlinkerButton Button1("btn-F");
BlinkerButton Button2("btn-B");
BlinkerButton Button3("btn-R");
BlinkerButton Button4("btn-L");
BlinkerButton Button5("btn-S");
// 按下按键即会执行该函数
void button1_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
Forward();
}
void button2_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
Back();
}
void button3_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
Right();
}
void button4_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
Left();
}
void button5_callback(const String & state)
{
BLINKER_LOG("get button state: ", state);
Stop();
}
void setup()
{
// 初始化串口
Serial.begin(115200);
pinMode(DRV_A, OUTPUT);
pinMode(DRV_B, OUTPUT);
pinMode(DIR_A, OUTPUT);
pinMode(DIR_B, OUTPUT);
digitalWrite(DRV_A, LOW);
digitalWrite(DRV_B, LOW);
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, LOW);
BLINKER_DEBUG.stream(Serial);
BLINKER_DEBUG.debugAll();
Blinker.begin(auth, ssid, pswd);
Button1.attach(button1_callback);
Button2.attach(button2_callback);
Button3.attach(button3_callback);
Button4.attach(button4_callback);
Button5.attach(button5_callback);
}
void loop() {
Blinker.run();
}






