函数
Wemos同Arduino
上电后不断执行loop函数中的代码,我们核心控制代码写入loop
setup函数只调用一次,一般用于硬件相关的初始化,比如IO口,串口,wifi等
void setup() {
}
void loop() {
}
串口函数
Serial.begin(115200) 开启串口 设置波特率
Serial.begin("start") 串口输出数据并换行
Serial.available() 判断缓冲区是否有数据
Serial.read() 读取缓存区的数据
Serial.println(); 串口打印函数
//Serial.println(cmd);
串口控制蜂鸣器
void setup() {
pinMode(D5, OUTPUT); //设置引脚为输出引脚
Serial.begin(115200); //初始化串口,设置波特率为115200
Serial.println(“start”); //测试串口是否启动,启动成功就发送start
}
void loop() {
int cmd;
if ( Serial.available() > 0 ) { //检测串口是否有数据
cmd = Serial.read(); // 读取串口数据
if (cmd == 1) { //如果读取的数据是1
digitalWrite(D5, LOW); // 蜂鸣器响起
} else {
digitalWrite(D5, HIGH); // 否则(读取数据非1)蜂鸣器不响
}
}
}
超声波测距
//声波在空气中传输的速度是:
343m/s
转换成厘米:34300/s
0.0343cm/us 每0.0343cm耗时1us
1us能走多少厘米 29.15
Pulseln(Echo ,HIGH) time
Time/58.3 波再空气中的总厘米
高电平的时间 表示的是信号发送出去到返回需要的时间
340m/s
声速的传播速度是340 时间/2 *340 可以计算出来距离是多少
HCSR04模块有四个引脚,VCC,GND,TRIG和ECHO;这些引脚有不同的功能。
VCC和GND是HSCR04的直接驱动电源。这些引脚需要分别连接到+5v电压和地。
TRIG引脚负责发射超声波信号的信号引脚。这个引脚需要用超过10us的高电平来启动,每一点HCSR04会发射8个40khz的方波。方波发射后,ECHO引脚会输出高电平。
ECHO引脚是用来测量距离的数据引脚。当一个超声波信号发射后,ECHO引脚会输出高电平。当ECHO引脚直到检测到超声波信号回来的时,ECHO引脚输出低电平。
舵机的接线
红色是VCC 棕色是GND 橙色是信号线
Servo库 | 使用方法 |
---|---|
servo.attach( ) | 连接舵机信号线引脚(自带库仅9/10脚有效) |
servo.write ( ) | 写入角度 |
servo.writeMicrseconds ( ) | 写入更精准的角度(um级) |
servo.read ( ) | 读取上一次舵机转动角度 |
servo.attached ( )-: | —检查舵机是否连接在控制板上 |
servo.detach ( ) | 断开舵机连接 |
#include <Servo.h> //舵机库
#define Echo D2 //定义宏命令
#define Trig D8
#define PIN_SERVO D5
Servo myservo; //舵机定义为myservo
long getTime() //超声波测距
{
digitalWrite(Trig,HIGH); //向trig角发送一个高电平
delayMicroseconds(10); //发送一个10us的脉冲
digitalWrite(Trig,LOW); //发送完成后trig变为低电平
return pulseIn(Echo,HIGH); //波传输过程echo高电平,计算高电平时间
//就获取波传输的时间,单位是us(微秒)
}
void chaoShengBo()
{
pinMode(Echo,INPUT); //作为输入引脚 检测超声波返回的引脚
pinMode(Trig,OUTPUT); //作为输出引脚
myservo.attach(PIN_SERVO); //舵机的引脚
}
void setup() {
// 定义一个超声波初始化的函数
chaoShengBo();
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
//获取距离
long dis; //得到的距离值
dis=getTime()/58; //得到的返回值
Serial.print(dis); //在串口中显示距离
Serial.println("cm"); //在换行前打印一个cm并换行
delay(500); //延时500
if(dis<15){
//当超声波的距离小于15时,舵机工作到从-90度上升到0度
myservo.write(0);//上升到0度
}else{
myservo.write(90);//下降90度
}
}
esp8266实现
需要头文件#include <ESP8266WiFi.h>
char* ssid = "Honor V9"; //“wifi热点名称”
char* passwd = "123456789"; //”wifi热点密码”
void initWifiSta()
{
WiFi.mode(WIFI_STA); // 设置STA模式
WiFi.begin(ssid, passwd); //连接网络
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println(WiFi.localIP()); //通过串口打印wemos的IP地址
delay(500);
}
Tips: 注意代码的大小写!!!!!!!!,注意中英文符号
编写Wemos服务器,通过手机控制tcp工具
int port = 8888; //端口号
WiFiServer server(port); // 设置服务器端口号
void loop() {
WiFiClient client = server.available(); //服务初始化
while (client.connected()) { //等待客户端连接
while (client.available() > 0) { //有数据到来,类似串口的那个函数
cmd = client.read();//读取数据
}
}
}
server.begin(); 端口启动函数启动函数
esp8266和端口号连接在一起
#include <ESP8266WiFi.h>
char* ssid = "Honor"; //“wifi热点名称”
char* passwd = "123456789"; //”wifi热点密码”
int port = 8888; //端口号
WiFiServer server(port); // 设置服务器端口号
void initWifiSta()
{
WiFi.mode(WIFI_STA); // 设置STA模式
WiFi.begin(ssid, passwd); //连接网络
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println(WiFi.localIP()); //通过串口打印wemos的IP地址
}
void setup() {
// put your setup code here, to run once:
//启动wifi
Serial.begin(115200);//设置串口启动并设置波特率
initWifiSta();//wifi配置函数
server.begin();//端口打开函数
}
void loop() {
// put your main code here, to run repeatedly:
char cmd;
WiFiClient client = server.available(); //服务初始化
while (client.connected()) { //等待客户端连接
while (client.available() > 0) { //有数据到来,类似串口的那个函数
cmd = client.read();//读取数据
if(cmd=='1'){
Serial.println("supeng");
}else{
Serial.println("kkk");
}
}
}
}
前后左右的控制代码
分别给电机高电平和低电平实现电机的前后左右移动
#define dong1 D6
#define dong2 D7
#define zhuan1 D4
#define zhuan2 D5
void initL9110()
{
pinMode(dong1,OUTPUT);
pinMode(dong2,OUTPUT);
pinMode(zhuan1,OUTPUT);
pinMode(zhuan2,OUTPUT);
}
void hou()
{
digitalWrite(dong1,HIGH);
digitalWrite(dong2,LOW);
}
void qian()
{
digitalWrite(dong1,LOW);
digitalWrite(dong2,HIGH);
}
void zuo()
{
digitalWrite(zhuan1,HIGH);
digitalWrite(zhuan2,LOW);
}
void you()
{
digitalWrite(zhuan1,LOW);
digitalWrite(zhuan2,HIGH);
}