这是很久以前的事了demo今天做个记录,毕竟是学习的过程。
准备材料和简述
WeMos D1
特性
工作中:
和stm32模块开发类似,集成度高
STM32方案也更经济便宜
红框中的板载无线网卡
支持AP(路由), sta(上网设备)模式
超声波模块
超声传感器模块通常有两个超声元件,一个用于发射,另一个用于接收。电路板上有四个引脚: VCC(正极)、Trig(触发)Echo(回应)、GND主要参数: 1.工作电压和电流:5V、15mA。 2.感知距离:2~400cm。 3.感测角度:不大于15°。 4.被测物体的面积不得小于50cm并尽可能平整,有温度补偿电路。 5.在超声波模块的触发脚位输入超过10个微妙的高电位,发射超声波,在接收传回的超声波之前,响应脚位呈现高电位。因此,该程序可以从响应脚位的高电位脉冲连续性来转换被测物体的距离。
L9110S直流电机驱动
L9110S参数:输入电压2.5V-12V,输出电流800mA,正反转 描述: L9110 为控制和驱动电机设计的两通道推拉式功率放大专用集成电路器件,将单片分立电路集成IC 之中,使外围器件成本降低,整机可靠性提高。有两个芯片TTL/CMOS兼容电平输入,抗干扰性好;两个输出端可以直接驱动电机的正反向运动,电流驱动能力大,每个通道可以通过800mA 峰值电流能力可达1.5A;具有较低的输出饱和压降;内置钳位二极管能释放感性负载的反向冲击电流,安全可靠地使用驱动继电器、直流电机、步进电机或开关电源管。L9110 广泛应用于玩具汽车电机驱动、脉冲电磁阀驱动、步进电机驱动、开关功率管等电路。 特点: 低静态工作电流; 宽电源电压范围:2.5V-12V; 每通道具有 800mA 连续电流输出能力; 饱和压降较低; TTL/CMOS 输出电平兼容,可直接连接CPU; 输出内置钳位二极管,适用于感性负载; 控制和驱动集成在单片中 IC 之中; 具有管脚高压保护功能; 工作温度:-20°C-80°C。
另外,开发环境是Arduino,和keil对比,Arduino串口、网络、sg90等;包括各种硬件开发接口,快速开发;自带串口调试工具,缺点是编程速度慢。
操作过程
首先,让我们看看硬件的连接线。
超声传感器: VCC——wemos 5V GND——wemos GND Trig——wemos D8 Echo——wemos D2
L9110S直流电机: VCC——wemos 5V、VIN GND——wemos GND //后轮 A-1B——wemos D7 A-1A——wemos D6 //转向 B-2A——wemos D4 B-1A——wemos D5
看看代码。
#include <ESP8266WiFi.h> #define Dong1 D7 #define Dong2 D6 #define Zhuan1 D5 #define Zhuan2 D4 #define Echo D2 #define Trig D8 char* ssid = "WiFi账号"; char* passwd = "WiFi密码"; int port = 8899;///口号,自己定 WiFiServer server(port);///设置服务器端口号 long getTime() {
digitalWrite(Trig, HIGH); delayMicroseconds(10); digitalWrite(Trig, LOW); return pulseIn(Echo, HIGH); } void initChaoShengBo() {
pinMode(Echo, INPUT); pinMode(Trig, OUTPUT); } void initWifiSta() {
WiFi.mode(WIFI_STA);//设置STA模式 WiFi.begin(ssid, passwd); //连接网络 while (WiFi.status() != WL_CONNECTED) {
Serial.print("."); delay(200); } Serial.println(WiFi.localIP());//通过串口打印wemos的ip地址 delay(500); } void initL9110s() {
pinMode(Dong1, OUTPUT); pinMode(Dong2, OUTPUT); pinMode(Zhuan1, OUTPUT); pinMode(Zhuan2, OUTPUT); } void zuo() {
digitalWrite(Zhuan1, HIGH); digitalWrite(Zhuan2, LOW); } void you() {
digitalWrite(Zhuan1, LOW); digitalWrite(Zhuan2, HIGH); } void zheng() {
digitalWrite(Zhuan1, HIGH); digitalWrite(Zhuan2, HIGH); } void hou() {
digitalWrite(Dong1, LOW); digitalWrite(Dong2, HIGH); } void qian() {
digitalWrite(Dong1, HIGH); digitalWrite(Dong2, LOW); } void ting() {
digitalWrite(Dong1, HIGH); digitalWrite(Dong2, HIGH); } void setup() {
initL9110s(); initChaoShengBo(); Serial.begin(115200); initWifiSta(); server.begin();//启动服务器 } void loop() {
char cmd; //获取距离 long dis; int mark = 0; WiFiClient client = server.available();//服务初始化 while (client.connected()) {
//等待客户端连接 while (client.available() > 0) {
//有数据到来 cmd = client.read();//读取数据 Serial.println(cmd); dis = getTime() / 58; if (dis < 15) {
hou(); delay(200); ting(); mark = 1; } else {
mark = 0; } if (mark == 0) {
switch (cmd) {
case 'q': qian(); break; case 'h': hou(); break; case 'z': zuo(); break; case 'y': you(); break; case 's': ting(); break; case 'd': zheng(); break; } } } } }
保存上传,静等编译,之后打开串口调试和网络调试工具。
根据代码发送指令就可以了,实现比较简陋,总体实现根据指令运转、接入WiFi以及小车避障功能。