一,意图
通过手机蓝牙连接WeMosD1R32开发板,开发板又通过TTL转USB与电脑连接.手机通过蓝牙控制开发板上的LED灯的开,关,闪等动作,在电脑上打开串口监视工具观察其状态.也可以通过电脑上的串口监视工具来控制开发板上LED灯的动作,而在手机蓝牙监测工具中显示灯的状态.
二,原料:
手机,TTL转USB转换器模块,WeMosD1R32开发板,电脑,杜邦线
三,连线
1,实物连线图
2,逻辑连线图
连线时注意:
- 一定要连接5V线,因为要为开发板供电.3V3可能无法工作.
- TXD和RXD连接时一定要交叉.
四,操作
1,连接好USB转TTL模块和WeMosD1R32开发板;
2,将USB插入电脑;
3,在电脑设备管理器中端口项目中,找到CH340对应的端口;
4,打开串口检测工具(通讯猫, sscom,等等);此实验采用的是arduino IDE的串口检测接口.
5,打开手机蓝牙,连接WeMosD1R32.设置好相关参数.
本实验设置如下:
发送 H.
发送1 L.
发送2 F.
发送3 B.
6,点击手机蓝牙工具按钮,观察电脑串口显示界面中的信息.
(切图有误,下面的红色方框内应该是:H.L.F.B.)
五,程序代码
/*
WeMos D2 R32
将蓝牙输入信息转换为电脑串口输出信息
将蓝牙输出信息转换为电脑串口输入信息
通过RS485连线,控制WoMos的板载LED灯,然后返回相关的信息
本程序只是简单地从串口接收命令.
"H" open
"L" close
"F" flicker
"B" blink
*/
#include "BluetoothSerial.h"
#include
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
BluetoothSerial SerialBT;
Ticker flipper;
#define LED_BUILTIN 2 // Set the GPIO pin where you connected your test LED or comment this line out if your dev board has a built-in LED
void flip() {
int state = digitalRead(LED_BUILTIN); // get the current state of GPIO1 pin
digitalWrite(LED_BUILTIN, !state); // set pin to the opposite state
}
void setup()
{
Serial.begin(9600);
SerialBT.begin("WeMosD1R32"); //Bluetooth device name
SerialBT.println("The device started, now you can pair it with bluetooth!");
pinM服务器托管网ode(LED_BUILTIN, OUTPUT);
//Serial.println();
//Serial.println("Device is ready...");
}
void loop()
{
String cstr = ""; // 用来保存客户端发来的数据
//直接读取一行
//String str=Serial.readString();
//按指定字符分割读取比如‘.’
//String str=Serial.readStringUntil('.');
String BTLine,PCLine;
if (SerialBT.available()) { // 检查蓝牙串口缓存是否有数据等待传输
BTLine = SerialBT.readStringUntil('.');
SerialBT.print("BT:");
SerialBT.println(BTLine);
//Serial.print("BT:");
//Serial.println(BTLine);
cstr = BTLine;
}
if (Serial.available()) { // 检查电脑串口缓存是否有数据等待传输
PCLine = Serial.readStringUntil('.');
//Serial.print("PC:");
//Serial.println(PCLine);
SerialBT.print("PC:");
SerialBT.println(PCLine);
cstr = PCLine;
}
if(cstr.length()>0) {
if (cstr.startsWith("H")) {
flipper.detach();
//Serial.println("--开灯");
digitalWrite(LED_BUILTIN, HIGH);
} else if (cstr.startsWith("L")) {
flipper.detach();
//Serial.println("--关灯");
digitalWrite(LED_BUILTIN, LOW);
} else if (cstr.startsWith("F")) {
//Serial.println("--闪烁");
flipper.attach(0.5, flip);
} else if (cstr.startsWith("B")) {
//Serial.println("--眨眼");
flipper.attach(0.1, flip);
} else {
//Serial.print("不知道的命令:");
//Serial.println(cstr);
}
// 以下两句为了向另一开发板的串口发送相同的命令
Serial.print(cstr);
Serial.print(".");
}
}
后记:
本实验的最终目的是将TTL/USB模块换为RS485/USB模块,需要考虑连线。后经努力,也成功实现了同样的功能。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg服务器托管网.net
Go语言的锁 在Go语言中,最常用的锁是互斥锁(Mutex)。互斥锁是一种特殊的二进制信号量,用于控制对共享资源的访问。Go语言通过标准库中的”sync”包提供了互斥锁的功能。互斥锁的类型定义如下: type Mutex struct { state int3…