基于wemosD1开发板的小车养成(一)

WeMos D1介绍

基于wemosD1开发板的小车养成(一)_第1张图片
特性:

  1. 基于ESP-8266EX

  2. Arduino兼容,使用rduino IDE来编程

  3. 11个 I/O 引脚

  4. 1 个ADC 引脚(输入范围0-3.3V)

  5. 板载5V 1A开关电源(高输入电压24V)

工作中:

和stm32模块开发类似,集成度高

STM32方案也更经济便宜

开发环境介绍

基于wemosD1开发板的小车养成(一)_第2张图片

Arduino开发环境,和keil对比

优点:

  • 集成很多开发库如串口,网络,sg90等
  • 各种硬件开发接口,迅捷开发
  • 自带串口调试工具 ;

缺点: 程序编译速度慢

开发环境的配置

基于wemosD1开发板的小车养成(一)_第3张图片
基于wemosD1开发板的小车养成(一)_第4张图片

Wemos同Arduino 
上电后不断执行loop函数中的代码,核心控制代码写入loop 
setup函数只调用一次,一般用于硬件相关的初始化,比如IO口,串口,wifi等 
void setup() { 

}

void loop() { 

}

实操:蜂鸣器

基于wemosD1开发板的小车养成(一)_第5张图片

基础控制:蜂鸣器响与不响
void setup() 
{ 
    pinMode(D5, OUTPUT); //设置引脚为输出引脚 
}
void loop() 
{ 
    digitalWrite(D5, HIGH); // 输出高电平,蜂鸣器不响 
    delay(1000); //停一秒
    digitalWrite(D5, LOW); //输出低电平,蜂鸣器响
    delay(1000); //响一秒(延时期间,蜂鸣器控制引脚属于低电平) 
}

串口通信

初始化函数

Serial.begin()

  • 描述:开启串口,通常置于setup()函数中
  • 原型:
    • Serial.begin(speed)
    • Serial.begin(speed, config)
  • 参数:
    • speed:波特率,一般取值9600,115200等
    • config:设置数据位,校验位和停止位。默认SERIAL_8N1表示8个数据位,无校验位,1个停止位。
  • 返回值:无

串口发送函数

Serial.println()

  • 描述:串口输出数据并换行
  • 原型:
    • Serial.println(val)
    • Serial.println(val, format)
  • 参数:
    • val:打印的值,任意数据类型
    • config:输出的数据格式
  • 返回值:返回写入的字节数

Serial.read()

  • 描述:读取串口数据,一次读一个字符,读完后删除已读数据
  • 原型:
    • Serial.read()
  • 参数:无
  • 返回值:返回串口缓存中第一个可读字节,当没有可读数据时返回-1,整数类型。

有数据到来函数

Serial.available()

  • 描述:判断串口缓存区的状态,返回从串口缓冲区读取的字节数
  • 原型:Serial.available()
  • 参数:无
  • 返回值:可读取的字节数
// 串口控制蜂鸣器
#define BEEP D5 

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  pinMode(BEEP, OUTPUT);
  digitalWrite(BEEP, HIGH);
}

void loop() {
  // put your main code here, to run repeatedly:
  int cmd;
  if (Serial.available() > 0)
  {
    cmd = Serial.read();
    if (cmd == 1)
    {
      Serial.println(cmd);
      digitalWrite(BEEP, LOW);
    }
    else
    {
      Serial.println(cmd);
      digitalWrite(BEEP, HIGH);
    }
  }
}

WiFi模块

基于wemosD1开发板的小车养成(一)_第6张图片

支持AP(路由), sta(上网设备)模式

作为设备接入wifi(STA模式)

#include 

char* ssid = "wifi名";
char* passwd = "WiFi密码";

void initWifiSta()
{
  WiFi.mode(WIFI_STA); // 设置STA模式
  WiFi.begin(ssid, passwd); //连接网络
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(500);
  }

}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  initWifiSta();
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println(WiFi.localIP()); //通过串口打印wemos的IP地址
  delay(500);
}

C/S模式(服务器和客户端)

服务器两大要素:

  • 地址:IP地址,域名等
  • 端口号:一台电脑或者设备有多个服务,每个服务用端口号区别

架设Wemos为ftp服务器

int port = 8888; //端口号 
WiFiServer server(port); // 设置服务器端口号 
void loop() { 
    WiFiClient client = server.available(); //服务初始化 
    while (client.connected()) { //等待客户端连接 
        while (client.available() > 0) { //有数据到来,类似串口的那个函数 
            cmd = client.read();//读取数据 
        } 
    } 
}
Tips: 启动服务器的API: server.begin();
手机TCP工具远程网络控制蜂鸣器
#include 
#define BEEP D5

char* ssid = "WiFi名";
char* passwd = "WiFi密码";
int port = 8888; //端口号
WiFiServer server(port); // 设置服务器端口号

void beepInit()
{
  pinMode(BEEP, OUTPUT);
  digitalWrite(BEEP, HIGH);
}

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:
  Serial.begin(115200);
  initWifiSta();
  beepInit();
  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')
      {
        digitalWrite(BEEP, LOW);
      }
      else
      {
        digitalWrite(BEEP, HIGH);
      }
    }
  }
}

超声波的测距原理

超声波模块介绍

基于wemosD1开发板的小车养成(一)_第7张图片

超声波模块原理

基于wemosD1开发板的小车养成(一)_第8张图片
基于wemosD1开发板的小车养成(一)_第9张图片

超声波和蜂鸣器结合

#define Echo D2
#define Trig D8
#define BEEP D5

long getTime()
{
  digitalWrite(Trig, HIGH);//设置一个方波
  delayMicroseconds(10);
  digitalWrite(Trig, LOW);

  return pulseIn(Echo, HIGH);//微秒
}

void initUltrasonic()
{
  pinMode(Echo, INPUT);
  pinMode(Trig, OUTPUT);
}

void setup() {
  // put your setup code here, to run once:
  pinMode(BEEP, OUTPUT);
  digitalWrite(BEEP, HIGH);
  initUltrasonic();
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  long dis;  //距离
  dis = getTime() / 58;
  Serial.print(dis);
  Serial.println("cm");
  if (dis < 10)
  {
    digitalWrite(BEEP, LOW);
  }
  else
  {
    digitalWrite(BEEP, HIGH);
  }
  delay(50);
}

你可能感兴趣的:(WemosD1,单片机,嵌入式硬件,c语言)