Funpack3-1基于XG24-EK2703A的蓝牙温度计
该项目使用了EFR32xG24 Explorer Kit,实现了蓝牙温度计的设计,它的主要功能为:使用芯片内部的温度检测外设,测量温度并通过蓝牙发送至上位机,在上位机中以“绘图”的形式对温度数据进行可视化。。
标签
嵌入式系统
Funpack活动
单片机开发
voncg
更新2024-03-06
安徽师范大学
122

一.项目描述

板卡介绍:


XG24-EK2703A是一款基于EFR32MG24片上系统的开发套件,具备超低成本、低功耗和小巧的特点。该套件支持2.4GHz无线通信,兼容蓝牙LE、蓝牙mesh、Zigbee、Thread和Matter协议,为无线物联网产品的开发和原型制作提供了极大的便利。


整个评估套件最核心部分是EFR32MG24B210F1536IM48无线SoC芯片,是使用蓝牙低功耗和蓝牙网状网络实现物联网无线连接的理想选择,适用于智能家居、照明和便携式医疗设备产品。该芯片是EFR32MG24无线SoC芯片家族系列中的中高端型号,以ARM Cortex-M3为核心、主频为78MHz且支持2.4GHz无线通信,带有1536KB闪存和256KBRAM,并且还搭载了AI/ML硬件加速功能,能够满足在嵌入式系统中部署轻量级AI应用。


该板卡套件所有的例程和相应的板卡资料都集成在了SDK开发包中,辅以配套的Simplicity Studio Version 5工具,只需要将SDK下载进Simplicity Studio Version 5中就可以进行例程的演示,操作方便简单。



套件特性:


一个USB接口

一个板载SEGGER J-Link 调试器,支持SWD

两个LED和两个按钮

虚拟COM端口

数据包跟踪接口(PTI)

一个支持外部硬件连接的mikroBus插座和一个Qwiic连接器

32 位 ARM Cortex-M33,78 MHz最高工作频率

1536 kB 闪存和 256 kB RAM


完成项目:

具体要求:使用芯片内部的温度检测外设,测量温度并通过蓝牙发送至上位机,在上位机中以“绘图”的形式对温度数据进行可视化。

实现方式:通过对单片机的蓝牙和温度采集进行初始化,手机连接蓝牙后将采集的信息发送,手机收取后进行plot绘图。

二.设计思路

​一开始按照直播教程所给的教程,下载Simplicity Studio,安装相应的SDK并且跑相关历程,来完成对单片机的入门。

但有群里的大佬发现了其支持CiruitPython,使用Thonny来进行开发,因为之前玩过树莓派PICO同样使用Thonny进行开发,因此使用起来熟练顺手,仅仅需要简单编程即可完成开发。

流程图:

image.png

(1)完成CiruitPython固件烧录

使用Simplicity Studio进行固件烧录,开发板连接电脑后,在设备管理器可以看到相对应的Jlink连接提示image.png

打开SS,按照如图顺序操作

image.png

image.png

image.png

点击flash即可完成固件烧录,最新固件下载地址在相关官网可以找到。


(2)蓝牙编写

​在提供的资料BLE UART | CircuitPython BLE Libraries on Any Computer | Adafruit Learning System中,有相关代码贴出告诉了蓝牙的相关操作

# SPDX-FileCopyrightText: 2020 Dan Halbert for Adafruit Industries
#
# SPDX-License-Identifier: MIT

# Provide an "eval()" service over BLE UART.

from adafruit_ble import BLERadio
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble.services.nordic import UARTService

ble = BLERadio()
uart = UARTService()
advertisement = ProvideServicesAdvertisement(uart)

while True:
ble.start_advertising(advertisement)
print("Waiting to connect")
while not ble.connected:
pass
print("Connected")
while ble.connected:
s = uart.readline()
if s:
try:
result = str(eval(s))
except Exception as e:
result = repr(e)
uart.write(result.encode("utf-8"))

此时框架已经搭好,我们只需要在此基础上采集温度,并发送这个数据。


(3)温度采集编写

参考群里大佬提供的资料,可知在CircuitPython中,要读取这个芯片内温度传感器的数据,有两种方法:

  • 直接使用 microcontroller 模块提供的功能读取
    import microcontroller
    print("CPU温度:", microcontroller.cpu.temperature)
  • 通过内存映射,读取芯片内部的寄存器数据 这篇分享,就是使用uctypes,通过内存映射,直接读取芯片内部的寄存器,从而获取该芯片内温度传感器的数据,并进行输出。

因此,为了更简单快速完成温度采集,此时采用第一种方法进行采集。

进行合并即可完成任务目标。



三.部分代码讲解

(1)相关库import

引入相关库

image.png

(2)蓝牙相关初始化

image.png

(3)主要执行部分

此部分进行蓝牙连接判断,连接后,每0.1s采集一次数据,进行五次采集,完成一次简单的均值滤波,最后uart.write上传数据

image.png

四.效果展示

PC端:

此时while判断是否连接上了蓝牙,若连接上就发提示,并且将数据发送并打印出来

image.png

手机端:

此时手机端使用Bluefruit Connect app,连上对应蓝牙后,点击plot即可看到折线图(这个蓝牙名称在ios上显示就是不正确,在安卓和windows上却完全正常)

IMG_8807.PNG

五.总结

       本次funpack可以说提供了一个很有趣的资源,并且有群里大佬的帮助,可以很方便的做出自己想做出的功能。此板子也很新颖有趣,但因为学业等问题,导致没有时间进行深入学习,因此此后打算重温过去浅浅略过的开发板,深入学习一下。

       很感谢硬禾学堂,提供一个平台,能够在空余时间提高自己开发的能力,学习到了更多的知识。同时我也期待未来还能够通过更多活动学习更多的内容。感谢电子森林能够提供这个平台。希望未来电子森林能够有更多好玩有趣的项目。白嫖更多的板子。

附件下载
code.py
相关代码
团队介绍
myself
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号