本文介绍了使用ESP8266作为控制处理器实现远程遥控船,从单片机写入源码、Web后台源码、控制端源码三个方面给出了源代码,然后给出二路直流电机控制板连接图以及讲解,最后给出硬件的连线方案,根据教程,小白也能完成。后续我自己将此方案进行升级后制作了更加稳定的水库垂钓打窝船(将饵料运送到指定位置后倒入水中)、放钓船(将海竿的鱼钩等使用小船运送到指定位置后放入水中)。后续升级采用了大扭力马达和升压模块,电机控制摆放模块,根据这篇文章的收益再决定是否可以将后续发布出来。
想要实现联网遥控船,用手机就可以远程遥控船在水中进行运动,并且可以实现无距离限制,其中涉及到很多关键点。使用手机发送控制指令到服务器,单片机不断的从服务器获取控制执行指令进行控制变化操作,进而实现控制遥控船在水中的前进后退以及转向操作。先展示实物效果。
一.准备材料:
ESP8266单片机一个
L298N驱动板(2路直流电机驱动模块比L298N便宜)
杜邦线若干
导线若干
18650电池两块(板子供电和马达控制供电分开可以使得马达转动更快,更有动力)
F130马达两个
扇叶两个
轴连接器两个(由于马达转轴较短,需要延长转动轴距离)
转动抽两根
支持插卡联网并且可以开启WIFI的旧手机一台
提供远程Web访问的服务器一台(阿里云、腾讯云、百度云都有免费的3个月体验名额)
二、源码开发
1、单片机写入源码
单片机的源码编写采用的是ArduinoIDE工具,源码如下:
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include<String.h>
// 测试HTTP请求用的URL。注意网址前面必须添加"http://,更改成自己的服务器访问地址即可"
#define URL "http://web地址/start.php?getinfo=0"
// 设置wifi接入信息(请根据您的WiFi信息进行修改)
const char* ssid = "12345678";
const char* password = "12345678";
void setup() {
initdo();//初始化输出引脚都为低电平
//初始化串口设置
Serial.begin(9600);
//设置ESP8266工作模式为无线终端模式
WiFi.mode(WIFI_STA);
//开始连接wifi
WiFi.begin(ssid, password);
//等待WiFi连接,连接成功打印IP
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.print("WiFi Connected!");
//httpClientRequest();
}
void loop() {
if(WiFi.status() != WL_CONNECTED){
//设置ESP8266工作模式为无线终端模式
dealout("10100000");
WiFi.mode(WIFI_STA);
//开始连接wifi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
//等待WiFi连接
delay(1000);
Serial.println("connecting wifi...");
}
}else{
httpClientRequest();
delay(300);
}
}
// 发送HTTP请求并且将服务器响应通过串口输出
void httpClientRequest(){
HTTPClient httpClient;
httpClient.begin(URL);
Serial.print("URL: "); Serial.println(URL);
//GET启动连接并发送HTTP请求
int httpCode = httpClient.GET();
Serial.print("Send GET request to URL: ");
Serial.println(URL);
//服务器响应HTTP_CODE_OK(200)则从服务器获取响应信息
if (httpCode == HTTP_CODE_OK) {
// 使用getString函数获取服务器响应体内容
String responsePayload = httpClient.getString();
Serial.println("Server Response Payload: ");
Serial.println(responsePayload);
//需要对responsePayload字符串进行拆解处理
String x=responsePayload;
dealout(x);
} else {
Serial.println("Server Respose Code:");
Serial.println(httpCode);
dealout("10100000");
}
//关闭ESP8266与服务器连接
httpClient.end();
}
void initdo(){//初始化引脚全部为输出模式且都为低电平
pinMode(D0,OUTPUT);
digitalWrite(D0,LOW);
pinMode(D1,OUTPUT);
digitalWrite(D1,LOW);
pinMode(D2,OUTPUT);
digitalWrite(D2,LOW);
pinMode(D3,OUTPUT);
digitalWrite(D3,LOW);
pinMode(D4,OUTPUT);
digitalWrite(D4,LOW);
pinMode(D5,OUTPUT);
digitalWrite(D5,LOW);
pinMode(D6,OUTPUT);
digitalWrite(D6,LOW);
pinMode(D7,OUTPUT);
digitalWrite(D7,LOW);
}
void dealout(String str){//通过传入的字符串进行拆分后控制引脚的电平状态
int i;
for(i=0;i<8;i++){
if(i==0){
pinMode(D0,OUTPUT);
if(str[i]=='0'){
digitalWrite(D0,LOW);
}else{
digitalWrite(D0,HIGH);
}
}
if(i==1){
pinMode(D1,OUTPUT);
if(str[i]=='0'){
digitalWrite(D1,LOW);
}else{
digitalWrite(D1,HIGH);
}
}
if(i==2){
pinMode(D2,OUTPUT);
if(str[i]=='0'){
digitalWrite(D2,LOW);
}else{
digitalWrite(D2,HIGH);
}
}
if(i==3){
pinMode(D3,OUTPUT);
if(str[i]=='0'){
digitalWrite(D3,LOW);
}else{
digitalWrite(D3,HIGH);
}
}
if(i==4){
pinMode(D4,OUTPUT);
if(str[i]=='0'){
digitalWrite(D4,LOW);
}else{
digitalWrite(D4,HIGH);
}
}
if(i==5){
pinMode(D5,OUTPUT);
if(str[i]=='0'){
digitalWrite(D5,LOW);
}else{
digitalWrite(D5,HIGH);
}
}
if(i==6){
pinMode(D6,OUTPUT);
if(str[i]=='0'){
digitalWrite(D6,LOW);
}else{
digitalWrite(D6,HIGH);
}
}
if(i==7){
pinMode(D7,OUTPUT);
if(str[i]=='0'){
digitalWrite(D7,LOW);
}else{
digitalWrite(D7,HIGH);
}
}
}
}
2、Web后台源码
Web后台采用的是php语言的脚本进行处理,所以需要在部署的时候部署好php运行环境,不会的可以百度一下。
<?php
if(isset($_GET['getinfo']) && $_GET['getinfo']=="0" ){//客户端获取控制信息
if(file_exists("./start.txt")){
//检测文件是否存在 在
$file=fopen("./start.txt","r") or die("系统错误!");
$data_array=array();
while(!feof($file))
{
$data_array[]= fgets($file);
}
fclose($file);
$tempstr="";
for($i=0;$i<count($data_array);$i++)
{
$tempstr=$tempstr .$data_array[$i];
}
echo $tempstr;//输出到返回值
}else{
$file=fopen("./start.txt","w") or die("系统错误!");
fwrite($file,"00000000");
fclose($file);
echo "00000000";
}
}
if(isset($_POST['id']) && strlen($_POST['id'])==8){
//接收手机端的控制信号
$file=fopen("./start.txt","w") or die("系统错误!");
fwrite($file,$_POST['id']);
fclose($file);
echo "1";
}
?>
3、控制端源码
我这里根据使用习惯采用的安卓app向服务器发送POST请求,将控制信息发送给服务器,其实可以采用HTML页面的方式发送POST请求,但是这方面我没有开发,所以只是展示安卓APP端的控制代码。并且想要用最快的方式创建一个安卓APP,建议使用E4A。先看app界面的组件效果图:
以下是根据功能开发的代码
变量 lswb 为 文本型
变量 server 为 文本型
事件 control.切换完毕()
保存设置("serverad","http://服务器地址/use_object/control/")
server=读取设置("serverad") & "start.php"
结束 事件
过程 提示(str 为 文本型)
如果 文本比较("1",str) =0 则
弹出提示("成功")
否则
弹出提示("失败")
结束 如果
结束 过程
事件 按钮1.被单击()'左前进
lswb=发送网络数据(server,"id=10000000","utf-8",5000)
提示(lswb)
结束 事件
事件 按钮3.被单击()'左停止
lswb=发送网络数据(server,"id=00000000","utf-8",5000)
提示(lswb)
结束 事件
事件 按钮7.被单击()'左边后退
lswb=发送网络数据(server,"id=01000000","utf-8",5000)
提示(lswb)
结束 事件
事件 按钮2.被单击()'右边前进
lswb=发送网络数据(server,"id=00100000","utf-8",5000)
提示(lswb)
结束 事件
事件 按钮4.被单击()'右边停止
lswb=发送网络数据(server,"id=00000000","utf-8",5000)
提示(lswb)
结束 事件
事件 按钮8.被单击()'右边后退
lswb=发送网络数据(server,"id=00010000","utf-8",5000)
提示(lswb)
结束 事件
事件 按钮5.被单击()'左右同时前进
lswb=发送网络数据(server,"id=10100000","utf-8",5000)
提示(lswb)
结束 事件
事件 按钮6.被单击()'左右同时后退
lswb=发送网络数据(server,"id=01010000","utf-8",5000)
提示(lswb)
结束 事件
事件 按钮9.被单击()'左右同时停止
lswb=发送网络数据(server,"id=00000000","utf-8",5000)
提示(lswb)
结束 事件
这里有必要解释一下控制命令的使用,使用1代表某一个引脚输出为高电平,使用0表示此引脚为低电平,我这里使用的8位,但是有效使用位数为前4位,后续4位保留用作后续拓展使用,即前两位表示左边控制马达的转向是正转或者反转,第三位和第四位表示右边控制马达的转向是正转或者反转。
当第一位和第二位为10时左边马达正转,产生向前的推动力
当第一位和第二位为01时左边马达反转,产生向后的推动力
当第三位和第四位为10时右边马达正转,产生向前的推动力
当第三位和第四位为01时右边马达反转,产生向后的推动力
三、控制原理和接线方案(重要)
控制原理是根据从L298N的输入端的高低电平来控制输出信号的正反转动,例如当ESP8266的D0端口输出高电平,即获取到的控制信号第一位是1,当获取到的控制信号第二位是0时D1端口输出低电平,将此控制信号输入L298N的IN1和IN2端口,则L298N的OUTA1输出正极电信号,OUTA2输出负极电信号。这里给出淘宝买的2路直流电机控制板的接线图,和L298N的接线图相同。
这里我们将ESP8266的D0、D1、D2、D3四个接口按照顺序接到2路直流电机控制板的IN1、IN2、IN3、IN4口,最好是自己会焊接。将ESP8266的5V或者3V接口接到18650电池的正极,将ESP8266的电源的GND接口接到18650电池的负极,此时ESP8266正常启动。此时需要我们为ESP8266提供WIFI连接,在上面的单片机写入源码里更改wifi信息。
// 设置wifi接入信息(请根据您的WiFi信息进行修改)
const char* ssid = "12345678";//wifi名称
const char* password = "12345678";//wifi密码
当单片机连上wifi之后我们就只需要在处理2路直流电机控制板的输入信号端的焊接连接工作,将两个马达分别焊接到OUTA-B端,如上图所示,此时我们的硬件部分搞定。如果按照我的方案,还需要制作安卓APP和部署服务器端,这是一个需要大量时间来学习的阶段。但是你不需要将这些都学习,仅仅需要百度一下使用E4A创建APP和PHP环境部署即可,根据现有的方案进行即可快速完成,还需要学会使用Arduino向单片机写入源码,这些都可以百度一下就学会了。当然马达的安装也是非常重要的,其中防水的问题是设备使用时间的关键,需要使用热熔胶对容易沾水的部分密封。
2025-02-24 11:26:08
2025-02-24 11:05:56
2025-02-24 10:50:13
2025-02-24 10:42:38
2025-02-24 10:18:28
2025-02-22 01:46:42
网站内容来自网络,如有侵权请联系我们,立即删除!
Copyright © 300学识网 鲁ICP备2022029071号-7
把钱存在银行,并非完全没有风险,有几种风险不得不防