一.项目描述
板卡介绍:
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进行开发,因此使用起来熟练顺手,仅仅需要简单编程即可完成开发。
流程图:
(1)完成CiruitPython固件烧录
使用Simplicity Studio进行固件烧录,开发板连接电脑后,在设备管理器可以看到相对应的Jlink连接提示
打开SS,按照如图顺序操作
点击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
引入相关库
(2)蓝牙相关初始化
(3)主要执行部分
此部分进行蓝牙连接判断,连接后,每0.1s采集一次数据,进行五次采集,完成一次简单的均值滤波,最后uart.write上传数据
四.效果展示
PC端:
此时while判断是否连接上了蓝牙,若连接上就发提示,并且将数据发送并打印出来
手机端:
此时手机端使用Bluefruit Connect app,连上对应蓝牙后,点击plot即可看到折线图(这个蓝牙名称在ios上显示就是不正确,在安卓和windows上却完全正常)
五.总结
本次funpack可以说提供了一个很有趣的资源,并且有群里大佬的帮助,可以很方便的做出自己想做出的功能。此板子也很新颖有趣,但因为学业等问题,导致没有时间进行深入学习,因此此后打算重温过去浅浅略过的开发板,深入学习一下。
很感谢硬禾学堂,提供一个平台,能够在空余时间提高自己开发的能力,学习到了更多的知识。同时我也期待未来还能够通过更多活动学习更多的内容。感谢电子森林能够提供这个平台。希望未来电子森林能够有更多好玩有趣的项目。白嫖更多的板子。