想要实现联网遥控船,用手机就可以远程遥控船在水中进走运动,并且可以实现无间隔限定,个中涉及到很多关键点。利用手机发送掌握指令到做事器,单片机不断的从做事器获取掌握实行指令进行掌握变革操作,进而实现掌握遥控船在水中的提高退却撤退以及转向操作。先展示实物效果。
一.准备材料:
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运行环境,不会的可以百度一下。
<?phpif(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向单片机写入源码,这些都可以百度一下就学会了。当然马达的安装也是非常主要的,个中防水的问题是设备利用韶光的关键,须要利用热熔胶对随意马虎沾水的部分密封。
至此,我们已经节制了源码、掌握事理、接线事理,接下来就自己实践去完成吧。有不懂的地方关注我,私信我,我会很耐心的帮你解答问题。