QQ交流群:656210280 前段时间利用ESP32_Cam摄像头模块和ESP32制作了一台扁豆播种机,可以利用手机APP实现遥控播种
这里我们使用ESP32_Cam摄像头作为图片传输的控制并且负责控制施肥装置以及播种装置的电机控制器。
另有一块ESP32作为网络节点负责为设备提供网络服务(WifiAP模式)以及负责运动方向的控制。
手机APP呢则是利用.NET平台的MAUI跨平台开发,当然这套代码理论上是适用于所有平台,不过本人只开发了安卓平台。 关于.NET
MAUI的开发之前也写过一系列的文章介绍,不过收视率惨淡。
我们利用利用手机APP接收ESP32Cam传输的图片数据,并且利用手机上的摇杆,向作为路由结点的ESP32发送运动数据,ESP32解析运动数据驱动电机运动。
运动控制的主要代码
void loop() { WiFiClient client; client = server.available(); if (client.available()) { String line = client.readStringUntil('A'); // 寻找括号的起始和结束位置 int startPos = line.indexOf('('); int endPos = line.indexOf(')');
// 提取括号内的内容 if (startPos != -1 && endPos != -1) { String positionString = line.substring(startPos + 1, endPos); //Serial.println("Position: " + positionString);
// 使用逗号分隔两个数字 int commaPos = positionString.indexOf(','); String xString = positionString.substring(0, commaPos); String yString = positionString.substring(commaPos + 1);
// 将字符串转换为数字 float x = atof(xString.c_str()); float y = atof(yString.c_str());
y = -y;//y轴交换 SetPWMDuty(x,y);
} }}
同样的,我们的APP上具有四个按钮,这四个按钮可以发送四个信号给ESP32Cam以便ESP32Cam控制电机的正转反转以及灯光的开启。
void loop() { camera_fb_t *fb = esp_camera_fb_get(); if (fb == nullptr || STANumber!= 0 ) { Serial.println("Camera capture failed"); } else { // 将图像帧转换为 Stream WiFiClient client;
client.connect(ip,8081);
client.write(fb->buf, fb->len);client = server.available();if (client.available()) { String message = client.readStringUntil('n'); Serial.println(message); if(message == "AStart") { // 如果接收到的内容是"Start",执行相应的操作 Serial.println(1);
ledcWrite(0,220); } else if (message == "AStop") { // 如果接收到的内容是"Stop",执行相应的操作 ledcWrite(0,0); Serial.println(2); } if (message == "BStart") { // 如果接收到的内容是"Start",执行相应的操作 ledcWrite(1,160); Serial.println(3); } else if (message == "BStop") { // 如果接收到的内容是"Stop",执行相应的操作 ledcWrite(1,0); Serial.println(4); } else if(message == "DStart") { ledcWrite(3,255); ledcWrite(0,0); Serial.println(5); } else if(message == "DStop") { ledcWrite(3,0); Serial.println(6); } else if(message == "CStart") { ledcWrite(2,255); Serial.println(7); } else if(message == "CStop") { ledcWrite(2,0); Serial.println(8); }} client.stop(); } esp_camera_fb_return(fb);}
这里的ABCD分别对应着:播种正转、施肥、灯光、播种反转
利用.NET MAUI完成编程。 其余的机械机构可以参考文章头的视频