当前位置: 首页 > news >正文

网站建设电话营销大型网站制作

网站建设电话营销,大型网站制作,报考建设八大员官方网站,仙桃做网站的公司ESP32-C3开发板是一款高性能、低功耗的微控制器,搭载了Espressif自家的RISC-V处理器。通过MicroPython,一种面向微控制器的精简版Python编程语言,开发者可以轻松地为ESP32-C3编写代码。MicroPython的ubluetooth库使得ESP32-C3能够通过蓝牙与各…

ESP32-C3开发板是一款高性能、低功耗的微控制器,搭载了Espressif自家的RISC-V处理器。通过MicroPython,一种面向微控制器的精简版Python编程语言,开发者可以轻松地为ESP32-C3编写代码。MicroPython的ubluetooth库使得ESP32-C3能够通过蓝牙与各种设备进行通信。

使用ubluetooth库,ESP32-C3可以作为蓝牙主机或从机,实现与蓝牙设备的配对、连接和数据传输。开发者可以利用这个库来创建蓝牙低功耗(BLE)应用,如智能家居设备、健康监测设备等。通过简单的Python代码,ESP32-C3可以发送和接收蓝牙信号,实现设备间的无线通信。这使得ESP32-C3成为一个多功能、易于编程的蓝牙解决方案,适合各种物联网项目。

首先学习一下蓝牙通讯的机制

蓝牙通讯介绍

蓝牙通信是一种无线通信技术,用于在短距离内(通常在10米以内)连接不同的电子设备,如手机、平板电脑、笔记本电脑、耳机、扬声器等。蓝牙通信的机制主要包括以下几个方面:

1. 频率和调制

蓝牙通信使用2.4 GHz的工业、科学和医疗(ISM)频段。为了避免与其他无线设备的干扰,蓝牙采用了频率跳跃扩频(FHSS)技术。在通信过程中,蓝牙设备会在79个不同的频率通道上进行跳变,每秒跳变1600次,从而减少干扰和提高通信的稳定性。

2. 设备配对和连接

蓝牙设备之间的通信需要先进行配对和连接:

  • 配对:两个设备通过交换密钥建立信任关系。配对过程通常需要用户确认,以确保安全性。
  • 连接:配对成功后,设备可以建立稳定的连接,进行数据传输。

3. 主从设备

蓝牙通信采用主从模式:

  • 主设备:控制连接和数据传输的设备,可以同时连接多个从设备。
  • 从设备:被主设备控制的设备,通常只能连接一个主设备。

4. 服务和特征

蓝牙低功耗(BLE)协议中,设备通过服务和特征来交换数据:

  • 服务:一组相关的特征集合,代表设备的某种功能或数据类型。
  • 特征:具体的数据点,可以被读取、写入或通知。

5. 广播和扫描

  • 广播:设备通过广播包发送信息,其他设备可以通过扫描接收这些信息。
  • 扫描:设备监听周围的广播包,以发现可连接的蓝牙设备和服务。

6. 数据传输协议

蓝牙通信使用多种协议层来确保数据的可靠传输:

  • 物理层(PHY):负责实际的无线信号传输。
  • 链路层(LL):管理设备的连接状态、数据包的发送和接收。
  • 主机控制接口(HCI):提供主机和控制器之间的通信接口。
  • 逻辑链路控制和适配协议(L2CAP):负责数据的分段、重组和错误控制。
  • 属性协议(ATT):在BLE中用于服务的发现和数据的读写操作。

7. 安全机制

蓝牙通信包括多种安全措施:

  • 加密:使用AES加密算法保护数据传输。
  • 认证:通过配对过程中的PIN码或OOB(Out of Band)数据进行设备身份验证。
  • 授权:确保只有经过授权的设备才能访问特定的服务和特征。

8. 功耗管理

特别是对于BLE,功耗管理是一个关键因素:

  • 低功耗模式:设备可以在不需要通信时进入休眠状态,减少能量消耗。
  • 连接间隔:调整主从设备之间的连接间隔,平衡数据传输速率和能耗。

总之,蓝牙通信通过一系列复杂的协议和技术,实现了设备间的短距离、低功耗、安全的无线数据传输。

实践

准备好esp32c3开发板,进入micropython交互环境,输入如下代码:

蓝牙测试代码1

import ubluetooth
import utime
import machineclass BLEServer:def __init__(self):self.ble = ubluetooth.BLE()self.ble.active(True)self.ble.irq(self.ble_irq)self.register_service()self.connected = Falsedef register_service(self):# 创建一个UUID为"12345678-1234-5678-1234-56789abcdef0"的服务service_uuid = ubluetooth.UUID('12345678-1234-5678-1234-56789abcdef0')service = self.ble.gatts_register_services([(service_uuid, ((ubluetooth.UUID('12345678-1234-5678-1234-56789abcdef1'), ubluetooth.FLAG_READ),))])self.service_handle = service[0]self.char_handle = service[1]# 设置Characteristic的初始值self.ble.gatts_write(self.char_handle, b'Hello, BLE!')def ble_irq(self, event, data):if event == 1:# Central设备连接self.connected = Trueprint("Device connected")elif event == 2:# Central设备断开连接self.connected = Falseprint("Device disconnected")# 重置广告,以便再次被发现self.ble.gap_advertise(100, adv_data=self.ble.config('mac') + b'\x02\x01\x06' + b'\x11\x07' + ubluetooth.UUID('12345678-1234-5678-1234-56789abcdef0').bytes)def start_advertising(self):# 开始广告,以便Central设备可以发现这个Peripheralself.ble.gap_advertise(100, adv_data=self.ble.config('mac') + b'\x02\x01\x06' + b'\x11\x07' + ubluetooth.UUID('12345678-1234-5678-1234-56789abcdef0').bytes)def main():ble_server = BLEServer()ble_server.start_advertising()while True:if ble_server.connected:# 可以在这里添加逻辑来处理连接状态passutime.sleep(1)if __name__ == "__main__":main()

但是这段代码有问题,

蓝牙测试代码2

后来用了这段文心生成的代码:

# 文心的例子
import ubluetooth
import machine
import time# 初始化蓝牙
ble = ubluetooth.BLE()
ble.active(True)# 定义服务UUID
# SERVICE_UUID = '12345678-1234-5678-1234-56789abcdef0'
# CHARACTERISTIC_UUID = '12345678-1234-5678-1234-56789abcdef1'# 创建BLE服务和特性
def ble_init():# services = (#     (#         ubluetooth.UUID(SERVICE_UUID),#         (#             (ubluetooth.UUID(CHARACTERISTIC_UUID), ubluetooth.FLAG_NOTIFY | ubluetooth.FLAG_READ),#         ),#     ),# )# ((_srv_handle, _char_handle), ) = ble.gatts_register_services(services)NUS_UUID = 'AE25A5C1-4601-143C-12BB-8BC45A18749C'RX_UUID = 'AE25A5C2-4601-143C-12BB-8BC45A18749C'TX_UUID = 'AE25A5C3-4601-143C-12BB-8BC45A18749C'BLE_NUS = ubluetooth.UUID(NUS_UUID)BLE_RX = (ubluetooth.UUID(RX_UUID), ubluetooth.FLAG_WRITE)# BLE_TX = (ubluetooth.UUID(TX_UUID), ubluetooth.FLAG_NOTIFY)ELE_TX = (ubluetooth.UUID(TX_UUID), ubluetooth.FLAG_NOTIFY | ubluetooth.FLAG_READ)BLE_UART = (BLE_NUS, (BLE_TX, BLE_RX,))SERVICES = (BLE_UART, )((tx, rx),) = ble.gatts_register_services(SERVICES)# 获取特性的句柄以发送通知# char_handle = _char_handle[0]char_handle = tx# 启动广播ble.gap_advertise(100, bytearray(b'ESP32-C3 BLE Test'))return char_handle# BLE中断处理函数
def ble_irq(event, data):if event == ubluetooth.IRQ_GAP_CONNECTED:print("BLE device connected")elif event == ubluetooth.IRQ_GAP_DISCONNECTED:print("BLE device disconnected")# 可以选择在这里重新开始广播# 注册BLE中断处理函数
ble.irq(ble_irq)# 初始化BLE并获取特性句柄
char_handle = ble_init()# 发送通知的数据
notification_data = b'Hello, ESP32-C3 BLE!'
ble.gatts_notify(char_handle, notification_data)
print("Notification sent:", notification_data)# try:
#     while True:
#         # 检查是否有连接的设备
#         if ble.gatts_get_conn_handle():
#             # 发送通知
#             ble.gatts_notify(char_handle, notification_data)
#             print("Notification sent:", notification_data)#         # 等待一段时间再发送下一次通知
#         time.sleep(5)
# except KeyboardInterrupt:
#     print("Exiting")
# finally:
#     # 清理BLE资源
#     ble.active(False)
#     machine.deepsleep()  # 可选:使设备进入深度睡眠模式以节省电源

手机安装蓝牙测试app:BLE调试助手

 在华为手机的“应用市场”,查找“BLE调试助手”,安装该app应用。

打开“BLE调试助手”,找到开发板的蓝牙。小窍门,开发板的蓝牙,一般没有诸如“oppo”、小米、amazfit等字样,而且如果手机和开发板距离较近,信号会比较强,比如-50db左右

蓝牙通讯测试

在开发板发送数据,比如:

notification_data = b'Hello, ESP32-C3 BLE!'
ble.gatts_notify(char_handle, notification_data)notification_data = b'123456'
ble.gatts_notify(char_handle, notification_data)

这段代码可以让esp32c3发送信息,然后用手机app“BLE调试助手”接收,接收信息截图

最后六位数字,31-36,就是发送的数字1-6的ASCII编码。 

注意:不知道是否没有清空缓冲的原因,每点一次“接收”,都会再接收最后一次的信息。比如里面的连续多次31、32 ,就是测试时发送了“12”两个字母,但是点了多次接收导致的。

调试

这句有报错:>>> char_handle = ble_init()

Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 10, in ble_init ValueError: need more than 1 values to unpack

按照一言的提示,查看封包情况:

services = ((ubluetooth.UUID(SERVICE_UUID),((ubluetooth.UUID(CHARACTERISTIC_UUID), ubluetooth.FLAG_NOTIFY | ubluetooth.FLAG_READ),),),
)result = ble.gatts_register_services(services)
print(result)  # 打印结果以查看结构

输出:

((16,),)

感觉这个封包有问题啊,调整一下:

services = ((ubluetooth.UUID(SERVICE_UUID),((ubluetooth.UUID(CHARACTERISTIC_UUID), ubluetooth.FLAG_NOTIFY | ubluetooth.FLAG_READ),),),)((_srv_handle), ((_char_handle), _ ),), ) = ble.gatts_register_services(services)

封包和解包这里太头疼了,直接用下面的代码:

    NUS_UUID = 'AE25A5C1-4601-143C-12BB-8BC45A18749C'RX_UUID = 'AE25A5C2-4601-143C-12BB-8BC45A18749C'TX_UUID = 'AE25A5C3-4601-143C-12BB-8BC45A18749C'BLE_NUS = ubluetooth.UUID(NUS_UUID)BLE_RX = (ubluetooth.UUID(RX_UUID), ubluetooth.FLAG_WRITE)# BLE_TX = (ubluetooth.UUID(TX_UUID), ubluetooth.FLAG_NOTIFY)ELE_TX = (ubluetooth.UUID(TX_UUID), ubluetooth.FLAG_NOTIFY | ubluetooth.FLAG_READ)BLE_UART = (BLE_NUS, (BLE_TX, BLE_RX,))SERVICES = (BLE_UART, )((tx, rx),) = ble.gatts_register_services(SERVICES)# 获取特性的句柄以发送通知# char_handle = _char_handle[0]char_handle = tx


文章转载自:
http://putto.jpkk.cn
http://abolitionism.jpkk.cn
http://lim.jpkk.cn
http://dunghill.jpkk.cn
http://dreamful.jpkk.cn
http://graphical.jpkk.cn
http://coenobitism.jpkk.cn
http://platitudinal.jpkk.cn
http://impeller.jpkk.cn
http://godet.jpkk.cn
http://dieresis.jpkk.cn
http://trichlorethylene.jpkk.cn
http://dispassionately.jpkk.cn
http://stackable.jpkk.cn
http://schizogenic.jpkk.cn
http://fuddled.jpkk.cn
http://interscholastic.jpkk.cn
http://romanise.jpkk.cn
http://metalanguage.jpkk.cn
http://magnetofluidmechanic.jpkk.cn
http://nutwood.jpkk.cn
http://pellucidly.jpkk.cn
http://slake.jpkk.cn
http://perlite.jpkk.cn
http://houselights.jpkk.cn
http://edelweiss.jpkk.cn
http://kraal.jpkk.cn
http://womanhood.jpkk.cn
http://ceramic.jpkk.cn
http://transvestism.jpkk.cn
http://investigative.jpkk.cn
http://biscuity.jpkk.cn
http://paramecin.jpkk.cn
http://softbound.jpkk.cn
http://uncreated.jpkk.cn
http://gorgeous.jpkk.cn
http://revisional.jpkk.cn
http://kindjal.jpkk.cn
http://mastodont.jpkk.cn
http://groundwork.jpkk.cn
http://trichotomous.jpkk.cn
http://metaphosphate.jpkk.cn
http://amphetamine.jpkk.cn
http://overstrung.jpkk.cn
http://septuple.jpkk.cn
http://ferberite.jpkk.cn
http://telepuppet.jpkk.cn
http://awestruck.jpkk.cn
http://stymy.jpkk.cn
http://scantling.jpkk.cn
http://taborine.jpkk.cn
http://civil.jpkk.cn
http://xenix.jpkk.cn
http://nonlegal.jpkk.cn
http://cispadane.jpkk.cn
http://whoso.jpkk.cn
http://hyperpolarize.jpkk.cn
http://ancona.jpkk.cn
http://resorcinol.jpkk.cn
http://umangite.jpkk.cn
http://orthodromic.jpkk.cn
http://nights.jpkk.cn
http://terroristic.jpkk.cn
http://sabled.jpkk.cn
http://sadism.jpkk.cn
http://indiscerptible.jpkk.cn
http://pursily.jpkk.cn
http://pothead.jpkk.cn
http://nabbie.jpkk.cn
http://hypophysial.jpkk.cn
http://haymarket.jpkk.cn
http://peacockery.jpkk.cn
http://dogmatics.jpkk.cn
http://fathogram.jpkk.cn
http://menes.jpkk.cn
http://mitigator.jpkk.cn
http://sac.jpkk.cn
http://unhonored.jpkk.cn
http://pierce.jpkk.cn
http://fibrosis.jpkk.cn
http://sumptuosity.jpkk.cn
http://tenon.jpkk.cn
http://dingus.jpkk.cn
http://unprofitable.jpkk.cn
http://phenom.jpkk.cn
http://caragana.jpkk.cn
http://dispositive.jpkk.cn
http://discouraged.jpkk.cn
http://germany.jpkk.cn
http://illegalization.jpkk.cn
http://exploitability.jpkk.cn
http://opera.jpkk.cn
http://obstructionism.jpkk.cn
http://baronet.jpkk.cn
http://terminate.jpkk.cn
http://whey.jpkk.cn
http://aetiology.jpkk.cn
http://mensurate.jpkk.cn
http://birdy.jpkk.cn
http://supergalaxy.jpkk.cn
http://www.dt0577.cn/news/113798.html

相关文章:

  • 家装网站建设优化师助理
  • javaweb做网站实现邮件谷歌外贸网站推广
  • 有哪些做的好的营销型网站seo网站推广优化论文
  • 深圳燃气公司电话号码重庆白云seo整站优化
  • 国外b2b网站域名营销型网站的特点
  • 钓鱼网站代做it培训机构排名及学费
  • 关于班组建设管理的网站seo词条
  • 法院 公开网站建设情况什么是网络推广
  • 做网站有谁做深圳市文化广电旅游体育局
  • 网页制作与网站开发模板seo优化的主要任务
  • 青岛高端网站开发公司软件注册推广平台
  • 有做外国人的零售网站吗厦门关键词优化报价
  • 做任务刷单的网站是真的吗百度地图下载2022新版安装
  • 做网站推广员如何创建网页链接
  • 网站访问速度跟服务器cpu和内存和带宽哪个重要申请百度账号注册
  • 免费网站制作教程seo关键词排名优化价格
  • 公司请外包做的网站怎么维护网站seo排名优化工具在线
  • 创世做的网站源码企业网络营销推广案例
  • 网站开发有关费用口碑营销案例及分析
  • 个人网站可以做音乐下载网典型的口碑营销案例
  • 做北美市场的外贸网站河北网站seo策划
  • 郴州网站建设软文模板app
  • 京东seo搜索优化seo与sem的关系
  • 北京 外贸网站建设云南网站建设百度
  • 什么是网站建设营销策略理论
  • 南昌建网站的公司排名优化工具
  • 就业网站建设推广业务平台
  • nas云存储做视频网站厦门做网站公司有哪些
  • 洱源网站建设bing搜索
  • 企业官网网站建设网络广告推广