×

Arduino 101 BLE漫游者遥控器

消耗积分:0 | 格式:zip | 大小:0.26 MB | 2022-12-22

王秀兰

分享资料个

描述

 

 
poYBAGOibvGAKV5EAACq-oq9nJg578.jpg
 

我购买了一个 Arduino 101 用于 Arduino 兼容性以及内置蓝牙低功耗和 6 轴加速度计/陀螺仪等额外功能。我想用我的 Arduino 101 构建一个基于 Arduino 的远程控制流动站,但很难找到示例代码。我发现了许多使用蓝牙的 RC 漫游者示例,但没有一个使用蓝牙 LE。

将通信问题分解成小块,我需要:

  • 了解如何将一个字节从我的智能手机或平板电脑传输到 Arduino 101
  • 确定如何创建一个可行的远程控制以将这些字节发送到流动站的状态机。

我确实解决了这两个问题。我很快发现我可以修改 CurieBLE 库中包含的 LED 和 CallbackLED 示例,以将一个字节传输到 Arduino 101,但很难找到可靠、易于使用的遥控器。经过大量的互联网搜索和一些工作后,我找到了一个新颖的解决方案,在此介绍。

第 1 步:通过 BLE 向 Arduino 101 发送字节

 
 
 
 
poYBAGOibvaAfuQjAABsXTEQgT4706.jpg
 
1 / 3
 

我在 Arduino 论坛上找到了这个基本通信挑战的答案:Arduino 论坛 > 产品 > Arduino 101。这是解释。

在名为 CallbackLED 的 Arduino 101 CurieBLE 示例中 - 定义了一个事件处理程序,以便在写入开关特性时调用。函数中的代码setup()如下所示:

// assign event handlers for characteristic  
switchChar.setEventHandler(BLEWritten, switchCharacteristicWritten);

switchCharacteristicWritten事件处理函数中,代码检查写入的值是零 (0x00) 还是其他值。如果非零,它将“打开”LED,如果为零,它将“关闭”LED。代码如下所示:

if (switchChar.value()) {
    Serial.println("LED on");    digitalWrite(ledPin, HIGH);
else {
    Serial.println("LED off");    digitalWrite(ledPin, LOW);   }

要捕获写入的字节,只需将其保存到一个变量中,然后在串口监视器上打印出来,代码如下所示:

if (switchChar.value()) { 
    Serial.println("LED on"); 
    digitalWrite(ledPin, HIGH); 
    char state =     switchChar.value(); 
    Serial.print("new value written: "); 
    Serial.println(state);  }
else {
    Serial.println("LED off"); 
    digitalWrite(ledPin, LOW);   }

我通过 Nordic Semiconductor 的 nRF Connect 应用程序编写角色来验证此功能是否有效,该应用程序在 Play Store 和 App Store 中均可用。

以下是安装应用程序后的详细步骤:

1.运行nRF Connect应用

2. 按右上角的“扫描”运行扫描仪 - 它通常会自动运行

3. 选择您的命名服务(在示例中它被命名为“LEDCB”)。

4. 按右侧的“连接”。

5. 选择未知服务(服务列表中的最后一个)。

6. 按右边的向上箭头。这会弹出一个写入值对话框。

7. 按“新值”,输入一个十六进制字节值,如 61 - 这是 ASCII 文本中的“a”。

8. 按右下角的“发送”,您的字节就被发送了。

按照这些步骤,我们成功地通过蓝牙 LE 将字节写入 Arduino 101。

第 2 步:创建蓝牙 LE 遥控器

 
 
 
 
poYBAGOifWmAOGTNAABsTxPXnVQ228.jpg
 
1 / 4
 

我喜欢 nRF Connect 应用程序,但我找不到制作可用遥控器的方法。通过 nRF Connect 应用程序手动输入字节不会让我有效地控制流动站。为了试用其他 Arduino 101 示例,我下载了另一个名为 nRF 工具箱的 nRF 应用程序。在工具箱中,最后一个应用程序的名称为“UART”。UART 应用程序有九个用户可定义的按钮,可以配置为在按下按钮时发送命令。按右上角的“编辑”会使所有按钮变为橙色。触摸按钮会弹出一个对话框,将图标与按钮相关联,并定义按下时要发送的命令。

我有一部 Android 手机,可用图标与我的遥控器完美匹配。在 IOS 设备上,图标不太适合这种用法,但请选择您能记住的图标。我的流动站的运动控制基于使用以下配置的简单单字节代码(我使用了 Deba168 教程中用于“智能手机控制的 Arduino 流动站”的控制序列)。这是命令列表和相应的字符:

一个 - 向前

b - 左

c - 停止

d - 右

e - 反转

1 - 25% 的电机功率

2 - 50% 的电机功率

3 - 75% 的电机功率

4 - 100% 电机功率

当我第一次创建遥控器时,我输入了字符的 ASCII 值 - 这没有用。正确的命令是字母/数字本身,而不是它的 ASCII 值。当我输入所有九个图标和命令时,我按下“完成”。我完成的遥控器看起来像图片。

简单吧?还好没那么快。当我尝试将具有 CallbackLED 开关特性的 Arduino 101 BLE 服务连接到 UART 应用程序时,它会抱怨“该设备没有所需的服务”。我在 Nordic 和 UART 上进行了互联网搜索。我发现 UART 应用程序希望看到非常具体的服务 UUID 和特征。使用以下信息:https://www.nordicsemi.com/eng/Products/Nordic-mob ...。我将正确的服务名称、UUID 以及 Tx 和 Rx 特征集成到我的 Arduino 草图中,然后我进行了一些调整以解决该服务可以传输多个字符并因此提供指向第一个元素的指针这一事实一个数组并且它有效。

第 3 步:测试遥控器

 
pYYBAGOifWyALdPQAAB_zO7sqeM774.jpg
 

Sketch 会将传输的字节发送到串行监视器,以验证 UART 应用程序上的每个按钮是否发送了所需的字节。

要使用遥控器,请按照下列步骤操作:

1.打开nRF工具箱

2. 选择串口应用

3. 按“连接”按钮,然后选择您的 BLE 服务的名称 - “BLE_ROV”。

该按钮现在应显示为“断开连接”。您现在已连接,每次按下按钮都会传输该按钮的命令。

注意:在使用旧 IOS 手机测试此草图时,我发现我宣传的本地名称“BLE_ROV”没有出现在要连接的列表中。相反,我看到类似“Arduino 101-xxxx”的内容,其中 xxxx 是 BLE 芯片 Mac 地址的最后 4 个十六进制数字 - 显示在 Arduino 101 板背面的小标签上。只需选择要连接的名称,一切都会正常。

这是我能找到的最简单的解决方案。当您按下遥控器上的每个键然后断开连接时,包含可供下载的 Arduino 草图以及串行监视器的图像。

我希望这是有用的。我将在稍后提供我建造的漫游者的完整说明。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !