- 博客(31)
- 收藏
- 关注
原创 BK7258 使用 APP 调试 Doorbell 工程设备全指南
本文介绍了如何利用BekenIoT App调试BK7258智能门铃设备。该App提供设备管理、快捷配网和摄像头控制等功能,支持iOS和Android平台。调试步骤包括:进入debug模式选择设备型号(如BK7258_DL_09),配置网络、视频、LCD和音频参数,完成扫描配网后连接设备。功能界面提供摄像头、LCD显示、音频等调试选项,并显示实时帧率等信息。通过这套流程,开发者可快速掌握BK7258门铃设备的调试方法,为后续开发工作打好基础。
2025-09-10 14:49:34
713
原创 ESP32C3和ESP32S3的区别有哪些?该怎么选型?
ESP32-C3和ESP32-S3是乐鑫科技的两款Wi-Fi+蓝牙微控制器。C3采用RISC-V单核处理器(160MHz),功耗低,适合简单物联网设备;S3采用Xtensa双核处理器(240MHz),支持USB、摄像头等丰富接口,适合高性能应用。选型关键点:C3适合低成本、低功耗场景(如传感器节点),S3适用于复杂计算、多媒体处理(如语音识别、图像显示)。两者均支持Wi-Fi/BLE,但S3射频性能更强,开发成本也更高。根据项目需求平衡性能、功耗和成本即可选择。
2025-08-30 17:22:48
749
原创 嵌入式产品开发全流程:从需求到落地的完整指南
本文系统介绍了嵌入式产品开发的全流程,从需求定义到市场认证的完整路径。开发过程分为三大阶段:需求与设计阶段重点明确功能、性能、成本和应用场景需求,完成软硬件架构设计;开发与调试阶段实现硬件PCB设计制作、软件分层开发及系统联调;试产与认证阶段通过小批量试产验证生产工艺,完成产品认证获取市场准入资格。整个流程环环相扣,强调量化指标、模块化设计和问题闭环,为开发团队提供了一套从技术实现到产品落地的系统方法论。文章最后指出各阶段常见风险点,并倡导从业者交流优化开发实践。
2025-08-29 13:41:38
733
原创 ESP32 中使用LVGL显示FATFS中的图片无法显示的解决办法
摘要:在LVGL V9.2图像处理中,频繁出现日志 image_decoder_get_info: Image decoder didn't set strid导致设备重启的问题。通过分析发现,问题源于局部变量使用、内存分配及数据指针设置不当。解决方案采用全局变量存储图像数据,正确初始化lv_draw_buf_t结构体,并确保图像数据指针正确指向。关键改进包括:全局缓冲区分配、静态draw_buf声明、完整文件读取验证,以及使用LVGL V9新API进行图像解码和显示设置,最终解决了日志泛滥和系统崩溃问题。
2025-08-29 11:43:54
339
原创 ESP32-S3 驱动 RGB 屏幕:画面飘移与撕裂问题
本文针对ESP32-S3驱动RGB屏幕时的画面漂移与撕裂问题,提出多维度解决方案。硬件层面优化总线带宽和缓存配置,包括提升Flash/PSRAM工作频率、调整缓存参数等;软件层面建议采用XIPPSRAM+RGBBouncebuffer组合方案,并对NVS操作和大文件处理进行代码优化。同时给出动态时钟调节、手动刷屏等应用层解决策略,有效平衡系统性能与显示效果。方案适用于Wi-Fi操作、Flash写入等复杂场景,具有RGB屏幕的普适参考价值。
2025-08-18 13:56:35
878
原创 如何在LVGL之外的线程更新UI内容
在LVGL线程之外的线程,更新UI内容时,会导致程序崩溃。导致LVGL卡死现象,进而程序崩溃,主要原因就是在LVGL的线程外更新了LVGL对象导致的,接下来分析并解决该问题!
2025-05-19 20:19:52
1127
3
原创 LVGL 8.3版本 多任务环境下使用LVGL
LVGL图形库在多线程环境中的安全使用说明:LVGL默认不是线程安全的,仅允许在事件处理和定时器回调中安全调用API。多线程环境下必须使用互斥锁保护所有LVGL相关操作,包括定时器处理函数lv_timer_handler的调用。建议避免在中断中直接调用LVGL函数(除lv_tick_inc和lv_disp_flush_ready外),推荐在中断中设置标志位,在定时器中处理实际逻辑。文中提供了伪代码示例,展示如何通过加锁机制确保多线程安全访问LVGL对象。
2025-01-09 16:59:24
1540
原创 网络程序通信的流程---socket与TCP的简单认识
IP地址是互联网协议地址(Internet Protocol Address)的缩写,用于在IP网络中唯一标识一个设备。它通常由四个数字组成,每个数字在0-255之间,用点号分隔。IP地址分为IPv4和IPv6两种版本,其中IPv4是目前广泛使用的版本。端口是计算机上用于接收和发送数据的接口。每个端口都有一个唯一的端口号,用于标识和区分不同的服务或应用程序。常见的端口号有HTTP(80)、HTTPS(443)、FTP(21)等。1.通过ip地址找到网络中的设备2.通过端口号找到对应进程的端口。
2024-06-19 09:33:03
656
原创 力扣刷题日记--2288.价格减免 难度中等
那么该单词就表示一个价格。我们提取后续的字符,转换成整数,计算折扣(即乘上 1−discount1001 - \dfrac{\textit{discount}}{100}1−100discount),保留两位小数,再转换回字符串,并添加开头的 $ 即可。- "$1" 减免 50% 为 "$0.50" ,所以 "$1" 替换为 "$0.50"。- "$2" 减免 50% 为 "$1" ,所以 "$1" 替换为 "$1.00"。表示价格的单词分别是 "$3"、"$5"、"$6" 和 "$9"。
2024-06-19 09:08:39
1073
原创 我对程序员的职业理解
在一次紧急项目中,他运用刚刚学习的微服务架构知识,快速重构了一部分系统,显著提升了系统的稳定性和响应速度,得到了团队和管理层的认可。1. 持续学习与自我提升:技术日新月异,保持好奇心和学习热情,积极跟进新技术、新工具,不断提升自己的技能水平,是程序员应持之以恒的态度。6. 代码规范与可维护性:遵循良好的编码规范,编写清晰、可读性强的代码,注重代码结构和模块化设计,确保项目的可维护性和扩展性。10. 终身学习:认识到学习是一个持续的过程,不断挑战自我,探索未知领域,拓宽知识边界,保持职业生涯的活力和竞争力。
2024-06-13 10:55:24
1390
原创 2024年,计算机相关专业还值得选择吗?
计算机行业的发展态势既充满挑战也孕育着无限机遇,要求从业者不断学习新技能,紧跟技术前沿,同时也强调了伦理、可持续性与社会责任的重要性。综上所述,计算机相关专业虽然竞争激烈,但凭借其广泛的应用前景和持续的技术创新,仍然是一个充满机遇的领域。关键在于个人是否具备相应的兴趣、能力和持续学习的决心。如果你是今年的高考生,通过自我评估和实践探索,你可以更明智地决定是否踏上这条充满挑战与机遇的道路。
2024-06-13 10:42:36
889
原创 字符串、HEX 十六进制互转工具
最近,在搞BLE相关的项目,需要用到字符串转16进制通过广播包发送出去,但是在网上找了好久都没有找到相应要的工具,终于在我坚持不懈的寻找下,发现了这款免费的转换工具!有需要的自取,使用起来也很方便!我就不一 一列举啦,有兴趣的去首页发掘吧!在网站首页 还有很多实用的工具!
2024-06-12 16:31:10
2034
原创 蓝牙广播包 分析 蓝牙ble接收广播数据
标准的UUID:由SIG发布,采用UUID基数+16位UUID的形式,如心率服务的UUID是0x180D,使用的UUID基数是:00000000-0000-1000-8000 - 00805F9B34FB。厂商自定义的UUID:同样采用UUID基数+16位UUID的形式,由厂商定义,如BLE串口的UUID是0x0001,使用的UUID基数是:6E400001-B5A3-F393-E0A9-E50E24DCCA9E。下图是标准UUID传输的示意图。
2024-06-12 16:21:48
6374
原创 正则表达式的学习与使用
正则表达式是一种强大的模式匹配和字符串搜索工具。它使用特定的语法规则表示一种模式,可以用于在文本中查找、替换或提取特定的字符串。
2024-06-04 17:13:18
911
原创 LVGL--> Flex(弹性布局)
Flex(弹性布局)Overview(概述)Flexbox(或简称 Flex)是的一个子集。它可以将项目排列成行或列(轨道),处理环绕,调整项目和轨道之间的间距,处理 grow 以使项目填充剩余空间的最小/最大宽度和高度。要使对象 flex 容器调用 lv_obj_set_layout(obj, LV_LAYOUT_FLEX)。请注意,LVGL 的 flex 布局功能需要通过 lv_conf.h 中的 LV_USE_FLEX 全局启用。
2024-05-25 10:52:43
3494
2
原创 LVGL Event——事件
可以向一个对象添加更多事件,如下所示:如果传入的用户数据不一样,一个对象可以绑定同一个事件回调函数多次。例如:这些事件将按照添加的顺序被调用。更多的对象可以使用相同的 事件回调。任何自定义事件代码都可以通过 uint32_t MY_EVENT_1 = lv_event_register_id();注册并且可以使用 lv_event_send(obj, MY_EVENT_1, &some_data) 发送到任何对象。
2024-05-21 20:40:07
5238
1
原创 用#define宏替换和typedef那个方式更好?
总结一下,`#define` 主要用于定义常量和宏替换,而 `typedef` 主要用于创建数据类型别名。`typedef` 是一个关键字,用于创建新的数据类型别名。它是在编译之前进行文本替换的。这样在代码中使用 `SQUARE(x)` 将会被替换为 `((x) * (x))`。这样就可以用 `Age` 来代替 `int` 类型。`#define` 和 `typedef` 是在 C/C++ 语言中用于定义类型别名的关键字,它们有一些区别。这将在编译前将所有出现的 `PI` 替换为 `3.14159`。
2023-10-13 20:02:33
266
原创 快速入门排序算法——桶排序(简化版)
快速入门排序算法——桶排序这是简化后易于理解的桶排序,是一个非常快的排序算法,其实这不是真正的桶排序(那会比这个复杂的多),但是简单易懂,对于想要入门排序算法的小白,这是一个非常好的起点。
2023-06-02 10:03:33
152
嵌入式软件工程师自我提升策略
2024-06-12
嵌入式芯片BK7258由上海博通研发,部分说明文档,或许能帮到你!
2024-05-27
BK-UART串口API的分析与使用
2023-11-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅