工作中:
和stm32模块开发类似,集成度高
STM32方案也更经济便宜
优点: 集成很多开发库如串口,网络,sg90等
各种硬件开发接口,迅捷开发
自带串口调试工具
缺点: 程序编译速度慢
WeMos D1在ArduiNo下编程要注意开发环境的配置
工具-----> 板:“WeMos D1”
VCC ---- Wemos 3.3v
GND ---- Wemos GND
I/o ---- Wemos D5
(D5配置成输出端口,低电平蜂鸣器响,高电平不响)
Wemos同Arduino
上电后不断执行loop函数中的代码,我们核心控制代码写入loop
setup函数只调用一次,一般用于硬件相关的初始化,比如IO口,串口,wifi等
void setup() {
}
void loop() {
}
基础控制:蜂鸣器叫唤和不叫唤
void setup() {
pinMode(D5, OUTPUT); //设置引脚为输出引脚
digitalWrite(D5, HIGH); //蜂鸣器初始化闭嘴
}
void loop() {
digitalWrite(D5, HIGH); // 输出高电平,蜂鸣器闭嘴
delay(1000); //这一秒内都得闭嘴
digitalWrite(D5, LOW); //输出低电平,蜂鸣器吼起来
delay(1000); //吼一秒(延时期间,蜂鸣器控制引脚属于低电平)
}
通信顾名思义就是传送数据
电脑和单片机,单片机和单片机之间都可以互相传数据,
串口是一个有线传输的方式,
像usb传输一样,
比如鼠标滑动,单击就是发生了鼠标数据发送给电脑,从而实现操控
Serial.begin() (初始化函数)
▶描述:开启串口,通常置用于setup()函数。
▶原型:
Serial.begin(spend)
Serial.begin(spend,config)
▶参数:
spend:波特率,一般取值9600,115200等。
config:设置数据位,校验位和停止位。默认SERIAL_8N1表示8个数据位,无校验 。
▶返回值:
无。
Serial.println() (串口发送函数)
▶描述:串口输出数据并换行。
▶原型:
Serial.println(val)
Serial.begin(val,format)
▶参数:
val:打印的值,任何数据类型。
format:输出的数据格式。
▶返回值:返回写入的字节数。
Serial.available() (有数据到来函数)
▶描述:判断串口缓冲区的状态,返回从串口缓冲区读取的字节数。
▶原型:Serial.available()
▶参数:无。
▶返回值:可读取的字节数。
Serial.read() (串口发送函数)
▶描述:读取串口数据,一次读一个字符,读完后删除已读数据。
▶原型:Serial.read()
▶参数:无。
▶返回值:返回串口缓存中第一个可读字节,当没有可读数据是返回-1,整数类型。
串口控制蜂鸣器
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)蜂鸣器不响
}
}
}
(板载无线网卡支持AP(路由), sta(上网设备)模式)
char* ssid = "xxxxx"; //“wifi热点名称”
char* passwd = "xxxxx"; //“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: 注意代码的大小写!!!!!!!!,注意中英文符号
#include<ESP8266WiFi.h>
char* ssid = "xxxxx"; //“wifi热点名称”
char* passwd = "xxxxx"; //”wifi热点密码”
void initWifiSta()
{
WiFi.mode(WIFI_STA); // 设置STA模式
WiFi.begin(ssid, passwd); //连接网络
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
}
void setup() {
Serial.begin(115200);
initWifiSta();
}
void loop() {
Serial.println(WiFi.localIP()); //通过串口打印wemos的IP地址
delay(500);
}
服务器两大要素:1.地址 2.端口号
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();
#include<ESP8266WiFi.h>
char* ssid = "xxxxx"; //“wifi热点名称”
char* passwd = "xxxxx"; //”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() {
Serial.begin(115200);
//启动WiFi
//接入WiFi
initWifiSta();
server.begin();//启动服务器api
}
void loop() {
char cmd;
WiFiClient client = server.available(); //服务初始化
while (client.connected()) {
//等待客户端连接
while (client.available() > 0){
//有数据到来,类似串口的那个函数
cmd = client.read();//读取数据
if(cmd == 1){
Serial.println("lpl");
}else{
Serial.println("lck");
}
}
}
}
小生目前才疏学浅,写到的都是基础,一定继续努力。