FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。
FreeBuf+小程序把安全装进口袋
思路:nodemcu接入wifi同时根据指令控制舵机,通过给电机驱动板不同的高低电平,使舵机驱动板驱动马达。
假设A1A2为输入口,D1D2为输出口(接电机。)给驱动板供电以后,假设利用Nodemcu使A1为高电平,A2为低电平,则电机正转,相反,A2高电平,A1低电平,那么电机反转,A1A2都为低电平,则电机不转。
废弃玩具遥控车、淘汰手机旧电池、吃灰的钓鱼玩具ESP8266、9.9包邮舵机一个、小车里拆下来的线材、航模马达一个、灵巧的一双手。
使用ArduinoIDE来对Nodemcu(就是esp8266+4M的flask,即你们吃灰的那个)编程。所以需要先简单的配置一下arduino。
安装完成以后,进入首选项(Preferences),找到附加开发板管理器地址(AdditionalBoardManagerURLs),并在其后添加如下信息:
之后点击工具-开发板-开发板管理器,进入开发板管理器界面:
Windows:将下载好的blinker库解压到我的电脑>文档>Arduino>libraries文件夹中
MacOS:将下载好的blinker库解压到文稿>Arduino>libraries文件夹中
进入App,点击右上角的“+”号,然后选择添加设备
点击选择Arduino>WiFi接入
选择要接入的服务商
复制申请到的SecretKey
在设备列表页,点击设备图标,进入设备控制面板
首次进入设备控制面板,会弹出向导页
在向导页点击载入示例,即可载入示例组件
拆解并改装小车:
以前大概这样?
拆掉华丽的外表,并用烙铁在如图位置开个方形洞:
把多余的部件清理掉,余下转动装置
清理干净,电池盒的盖子什么的掀飞。不平的地方用烙铁抹平。
将舵机的舵把用螺丝固定,舵把在合适的位置拧上一个长螺丝钉,但是不要太长以免无法合盖。舵把的螺丝钉扣住玩具小车转向装置中间的洞。舵机牵拉,便可达到一个转弯的效果。
刚才打孔的地方就是固定舵机的地方。
组装好,再用螺丝压紧。
更换电机:把右边的垃圾小机机改为左边的老式航模电机。
由于航模电机长了一节,是不可能盖严了,把盖住电机屁股的那一块用烙铁抹掉。
盖住以后传动丝滑流畅,虽然丑了点,但是强行装上电机了。
#defineBLINKER_PRINTSerial
#defineBLINKER_WIFI
#include
#include
Servomyservo;
//向右转
voidright(){
intpos=0;
//舵机端口号
myservo.attach(D1);
for(pos=0;pos<=180;pos+=3){
myservo.write(pos);
delay(10);
}
myservo.write(180);
delay(200);
//向左转
voidleft(){
intpos=100;
for(pos=100;pos>=0;pos-=3){
myservo.write(0);
//复位
voidrest(){
myservo.write(100);
charauth[]="b8b8d0568edb";
charssid[]="LookCos";
charpswd[]="123456789";
//前进后退,左转右转
BlinkerButtonButton1("btn-qj");
BlinkerButtonButton2("btn-ht");
BlinkerButtonButton3("btn-zz");
BlinkerButtonButton4("btn-yz");
//方向复位按键
BlinkerButtonButton5("btn-rest");
//停车
BlinkerButtonButton6("btn-stop");
BlinkerNumberNumber1("num-abc");
intcounter=0;
//前进
voidbutton1_callback(constString&state){
BLINKER_LOG("getbuttonstate:",state);
digitalWrite(D3,HIGH);
digitalWrite(D2,LOW);
//后退
voidbutton2_callback(constString&state){
digitalWrite(D2,HIGH);
digitalWrite(D3,LOW);
//左转
voidbutton3_callback(constString&state){
left();
//右转
voidbutton4_callback(constString&state){
right();
//方向复位
voidbutton5_callback(constString&state){
rest();
voidbutton6_callback(constString&state){
//如果未绑定的组件被触发,则会执行其中内容
voiddataRead(constString&data)
{
BLINKER_LOG("BlinkerreadString:",data);
counter++;
Number1.print(counter);
voidsetup(){
//初始化串口
Serial.begin(115200);
#ifdefined(BLINKER_PRINT)
BLINKER_DEBUG.stream(BLINKER_PRINT);
#endif
pinMode(D2,OUTPUT);
pinMode(D3,OUTPUT);
//初始化blinker
Blinker.begin(auth,ssid,pswd);
Blinker.attachData(dataRead);
//前后左右
Button1.attach(button1_callback);
Button2.attach(button2_callback);
Button3.attach(button3_callback);
Button4.attach(button4_callback);
Button5.attach(button5_callback);
Button6.attach(button6_callback);
voidloop(){
Blinker.run();
烧录程序(直接USB插上即可):
一般的Nodemcu如何选择即可。
组装好,调试:
第一次用这个东西画图,画的不太好,而且我的电机驱动模块没有找到。就找了一个(绿色的那个)代替。
如图,我使用外置5V电源来驱动舵机与马达,值得注意的是,舵机要与Nodemcu共地(地线接一块)才能控制舵机。
下面那个电池(iPhone5S原装电池)专门用来驱动Nodemcu3.3V与5V皆可。
亲测,局域网环境,延迟很低。
完成了,放到地面跑还是很快的。圆了儿时梦想。
*本文原创作者:中华隐士家族,本文属于FreeBuf原创奖励计划,未经许可禁止转载