一、免开发App介绍

Ⅰ: 功能介绍

使用优比兔提供的免开发App,开发者无需开发App也可以很容易的实现硬件和手机App的交互。免开发App的结构也很简洁,一共3个页面。虽然结构简洁,但已包括各种常用的交互场景。其结构如下图:

app界面

左边页面:用来扫描附近的Ubeeto开发板蓝牙设备,并建立连接。

中间页面:仪表按键区

–仪表区:用来实时显示运行在开发板上的各种状态值(比如传感器值),最多可以显示9种值。

–按键区:用来向开发板下发控制指令,最多可以下发三种指令。

右边页面:终端显示区

–发送输入框:通过手机虚拟键盘输入需要下发给开发板的字符串

–终端显示区:用来实时显示下发给开发板的蓝牙数据、以及开发板上传给App的蓝牙数据

总结:通过上面的介绍可以看出,免开发App一共提供了三种核心功能,分别是:仪表显示功能、按键控制功能、以及终端功能(类似PC串口调试助手)。

Ⅱ: 安卓 & IOS App下载地址

安卓App下载:网盘地址(提取码:jzdg)

IOS App下载:目前正在应用商店审核中,敬请期待…

二、免开发App和Ubeeto开发板的对接教程

教程Ⅰ:App仪表实时显示Ubeeto开发板的状态值(仪表显示功能)

Ubeeto开发板设备端完整代码:

--这里请注意:广播名字必须为“Core”开头,比如"Core222"、"Core1234"等
LIB_NrfBleDefaultConfig("Core222")
Integer = 0 --整数变量
Float = 100.0 --浮点数变量
--开始大循环
while(GC(1) == true)
do
    LIB_DelayMs(1000)
    Integer = Integer + 1
    Float = Float + 0.1
    --向App发送标准json字符串,例如:{"整数":"6", "浮点数":"100.6"}
    json_str = string.format("{\"整数\":\"%d\", \"浮点数\":\"%.1f\"}", Integer, Float)
    tab = LIB_StrToTab(json_str)
    LIB_NrfBleSend(tab)
end

代码解析及演示

Ubeeto开发板通过向App发送标准json字符串来告诉App当前自己的一些状态值,该json字符串中最多能有9个元素(因为App最多支持9个仪表),每个元素代表一种仪表数据。比如本例中的json字符串中有两个元素,分别是“整数”、“浮点数”。当然您也可以换成其他名字,比如“温度”,“湿度”等。由于本例代码中的json字符串只有2个元素,所以App上剩下7个仪表淡化显示。实际运行效果如下图:

显示Ubeeto开发板的状态值

教程Ⅱ:App按键控制开发板(按键控制功能)

开发板设备端完整代码:

--配置D8为普通输出,控制开发板上的LED1
LIB_GpioOutputConfig("D8","STANDARD")
--配置D9为普通输出,控制开发板上的LED2
LIB_GpioOutputConfig("D9","STANDARD")
--配置蓝牙开始工作,这里请注意:广播名字必须为“Core”开头,比如"Core222"、"Core1234"等
LIB_NrfBleDefaultConfig("Core222")
--开始大循环
while(GC(1) == true)
do
    --查询是否收到手机发来的按键值
    recv_flag, recv_tab = LIB_NrfBleRecv()
    if recv_flag == 1 then
        --当在App中按下”绿色A“按钮时,App会下发"btn_g"
        if recv_tab[1] == 98 and recv_tab[5] == 103 then -- 字母b的ascii码为98,字母g为103
            LIB_GpioWrite("D8", 1) --LED1灭
        --当在App中按下”红色B“按钮时,App会下发"btn_r"
        elseif recv_tab[1] == 98 and recv_tab[5] == 114 then -- 字母b的ascii码为98,字母r为114
            LIB_GpioWrite("D9", 1) --LED2灭
        --当在App中按下”黄色C“按钮时,App会下发"btn_y"
        else
            LIB_GpioToggle("D8") --LED1亮
            LIB_GpioToggle("D9") --LED2亮
        end
    end
end

代码解析及演示

在免开发App的按键区按下A(绿色)或B(红色)或C(黄色)三个按键时,App会向开发板发送”btn_g”、“btn_r”、”btn_y” 这三种字符串。所以开发板可以根据收到的字符串的特征来判断用户是在App上按下了哪个按键。以上代码的实际运行效果如下图:

运行结果

最开始时两个LED都亮着,在演示过程中我依次按了ABC三个按钮,可以看到LED1和LED2都按预期变换状态了。

运行效果

教程Ⅲ:App终端显示区显示蓝牙数据的收发(类似PC端的串口调试助手)

开发板设备端完整代码:

--这里请注意:广播名字必须为“Core”开头,比如"Core222"、"Core1234"等
LIB_NrfBleDefaultConfig("Core222")
LIB_UsbConfig("CDC")
--开始大循环
while(GC(1) == true)
do
    LIB_DelayMs(1000)
    --每隔1秒钟向手机App发送一个"hello world"
    json_str = string.format("hello world")
    tab = LIB_StrToTab(json_str)
    LIB_NrfBleSend(tab)
    --查询是否收到手机App发来的数据
    recv_flag, recv_tab = LIB_NrfBleRecv()
    if recv_flag == 1 then
        --逐个打印出收到的蓝牙数据
        for k,v in ipairs(recv_tab) do
            print(k,v)
        end
    end
end

代码解析及演示

以上代码实现了物联网开发板每秒钟向手机App发送“hello world”字符串,并且如果开发板通过USB连接PC端串口调试助手时我们可以看到App端下发的数据。

所以在下图中的终端显示区内,我们可以看到开发板每秒钟上传的“hello world”字符串,并且可以看到我们通过手动在发送输入文本框中输入并发送的字符串内容(“112233aabbcc”)。

将Ubeeto开发板通过USB连接PC端串口调试助手时,我们也可以看到App下发的字符串内容(“112233aabbcc”),如下图(注意:代码中是按“112233aabbcc”字符串中每个字符的ascii值逐个打印出来的):

终端日志保存成文件并分享

我们可以通过长按终端显示区的黑色屏幕3秒,App就会弹出各种方式来分享或保存当前日志缓存区的所有内容。

三、其他蓝牙设备接入免开发App

Ⅰ:简介

我们提供的免开发App是一个开放的App,不仅可以无缝对接Ubeeto开发板,也可以对接用户自己的蓝牙设备或开发板,对接方法十分简单,用户只需要在自己的蓝牙设备或开发板中增加一个满足特定要求的service服务即可实现接入。一旦接入后,仪表区,按键去,以及终端显示区的功能都可以按照上面的教程来实现。

Ⅱ:接入方法

用户自己的蓝牙设备或开发板需提供一个service,包含两个特性,一个是Write特性,一个是Notify特性。其中:

Write特性:可以看成是手机发送数据给设备的通道,手机通过蓝牙发送给设备的数据就是存放在Write特性中。

Notify特性:可以看成是设备发送数据给手机的通道,设备通过蓝牙发送给手机的数据就是存放在Notify上。但是需要注意,手机要想收到来自设备的数据,需要手机端主动使能这个Notify特性的Notification功能。

下面是对service的具体描述

service(UUID: 0x0001)描述: service包含两个特性(Characteristic): 一个用来发送数据,一个用来接收数据。

Rx Characteristic (Write特性,UUID: 0x0002)用来接收手机的数据,手机蓝牙可以通过ATT Write方式向Rx Characteristic发送数据。

Tx Characteristic (Notify特性,UUID: 0x0003)用来向手机发送数据,如果手机蓝牙为Tx Characteristic使能了notification,那么设备就可以通过发送notification的方式向手机蓝牙发送数据。

四、安卓和 IOS App 定制开发及技术支持

如果我们提供的免开发 App 不能满足您目前的需求或在使用中遇到什么问题,您可以尝试联系我们的技术人员并提出您的技术需求。