• 手机,蓝牙开发板,TTL/USB模块,电脑四者之间的通讯


    一,意图

    通过手机蓝牙连接WeMosD1R32开发板,开发板又通过TTL转USB与电脑连接.手机通过蓝牙控制开发板上的LED灯的开,关,闪等动作,在电脑上打开串口监视工具观察其状态.也可以通过电脑上的串口监视工具来控制开发板上LED灯的动作,而在手机蓝牙监测工具中显示灯的状态.

    二,原料:

    手机,TTL转USB转换器模块,WeMosD1R32开发板,电脑,杜邦线

    三,连线

    1,实物连线图

    2,逻辑连线图

    连线时注意:

    1. 一定要连接5V线,因为要为开发板供电.3V3可能无法工作.
    2. 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.)

    五,程序代码

    1. /*
    2. WeMos D2 R32
    3. 将蓝牙输入信息转换为电脑串口输出信息
    4. 将蓝牙输出信息转换为电脑串口输入信息
    5. 通过RS485连线,控制WoMos的板载LED灯,然后返回相关的信息
    6. 本程序只是简单地从串口接收命令.
    7. "H" open
    8. "L" close
    9. "F" flicker
    10. "B" blink
    11. */
    12. #include "BluetoothSerial.h"
    13. #include
    14. #if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
    15. #error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
    16. #endif
    17. BluetoothSerial SerialBT;
    18. Ticker flipper;
    19. #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
    20. void flip() {
    21. int state = digitalRead(LED_BUILTIN); // get the current state of GPIO1 pin
    22. digitalWrite(LED_BUILTIN, !state); // set pin to the opposite state
    23. }
    24. void setup()
    25. {
    26. Serial.begin(9600);
    27. SerialBT.begin("WeMosD1R32"); //Bluetooth device name
    28. SerialBT.println("The device started, now you can pair it with bluetooth!");
    29. pinMode(LED_BUILTIN, OUTPUT);
    30. //Serial.println();
    31. //Serial.println("Device is ready...");
    32. }
    33. void loop()
    34. {
    35. String cstr = ""; // 用来保存客户端发来的数据
    36. //直接读取一行
    37. //String str=Serial.readString();
    38. //按指定字符分割读取比如‘.’
    39. //String str=Serial.readStringUntil('.');
    40. String BTLine,PCLine;
    41. if (SerialBT.available()) { // 检查蓝牙串口缓存是否有数据等待传输
    42. BTLine = SerialBT.readStringUntil('.');
    43. SerialBT.print("BT:");
    44. SerialBT.println(BTLine);
    45. //Serial.print("BT:");
    46. //Serial.println(BTLine);
    47. cstr = BTLine;
    48. }
    49. if (Serial.available()) { // 检查电脑串口缓存是否有数据等待传输
    50. PCLine = Serial.readStringUntil('.');
    51. //Serial.print("PC:");
    52. //Serial.println(PCLine);
    53. SerialBT.print("PC:");
    54. SerialBT.println(PCLine);
    55. cstr = PCLine;
    56. }
    57. if(cstr.length()>0) {
    58. if (cstr.startsWith("H")) {
    59. flipper.detach();
    60. //Serial.println("--开灯");
    61. digitalWrite(LED_BUILTIN, HIGH);
    62. } else if (cstr.startsWith("L")) {
    63. flipper.detach();
    64. //Serial.println("--关灯");
    65. digitalWrite(LED_BUILTIN, LOW);
    66. } else if (cstr.startsWith("F")) {
    67. //Serial.println("--闪烁");
    68. flipper.attach(0.5, flip);
    69. } else if (cstr.startsWith("B")) {
    70. //Serial.println("--眨眼");
    71. flipper.attach(0.1, flip);
    72. } else {
    73. //Serial.print("不知道的命令:");
    74. //Serial.println(cstr);
    75. }
    76. // 以下两句为了向另一开发板的串口发送相同的命令
    77. Serial.print(cstr);
    78. Serial.print(".");
    79. }
    80. }

    后记:

    本实验的最终目的是将TTL/USB模块换为RS485/USB模块,需要考虑连线。后经努力,也成功实现了同样的功能。

  • 相关阅读:
    libfaad2 主机编译和交叉编译
    智慧医院智能化方案
    请求的流只能读取1次的问题
    基于JAVA的会议管理系统参考【数据库设计、源码、开题报告】
    C#实战:Dapper操作PostgreSQL笔记
    算法题:树中根节点到到目标节点的路径java
    windows使用docker部署gitlab
    数据地图搜索功能模块项目总结【springBoot+Elasticsearch】
    vscode markdown preview enhanced插件显示图片alt标题注释
    【C语言】指针那些事之数组传参和指针传参的区别
  • 原文地址:https://blog.csdn.net/cuckoo1/article/details/134425796