物联网
文章平均质量分 81
烟斜洞庭
这个作者很懒,什么都没留下…
展开
-
快速部署一个简易的环温监测网络(BLE+MQTT+HTTP)
来新公司几个月了,发现有一个困扰的点是,货架上的机器对环境温度还比较敏感,然后机器本身散热也挺严重,导致货架上部分机器受到高温干扰无法正常运行。 因为我在秒测时主要就是做的测温这一块儿,所以提了个主意,想要在货架上部署温度传感器,然后通过物联网网关集成数据,我们就可以随时监测当前的机器处在什么温度下。领导雷厉风行,觉得对研发有一定的帮助,直接拍板了。 想法有了,就去找了一下,发现了有很多专用的物联网服务器,比如mosquitto之类的。再加上蓝牙网关,初步想法基...............原创 2022-06-19 23:18:04 · 1617 阅读 · 1 评论 -
ADC的相关知识整理
最近发生了多起电子表退货的事件,拿回来之后发现是电池没电了,从购买日期算起,已经多数使用超过一年了,符合产品标准。但是由于当初硬件同学定下的最低电压数值太低了,导致在没有达到这个电压的时候就带不动了。这里调整电压后,领导让整理一下ad相关的知识,做个ppt。我这个做软件的电路文盲,为了整理这些东西,我查询了数十篇网上的教程,然后翻阅了包括电子表、体温计和智能日历的PCB原理图以及对应平台的datasheet,前后请教了包括我牛逼上天的亲哥、我们牛逼上天的硬件总监以及Nordic的工程师好友。搞出来之...原创 2020-08-22 17:04:49 · 6495 阅读 · 5 评论 -
Nordic使用SAADC实现超高精度体温采集
2019年下半年,打磨了将近四个月的体温计终于在米家上线了,上线后恰逢疫情,销量非常可观,也算是没有辜负当时的呕心沥血。记得当时除了软件之外,主要的问题点包括以下几点: 1.基于产品的硬件电路设计,LED亮度受到了电流尖峰的影响,导致屏幕在亮屏的时候闪烁,甚至电压尖峰过大的时候,段码也会闪烁。然后导致闪烁的地方有包括广播的时候会产生非常大的尖峰电流,saadc采集的时候也会产生较大的电压波动,然后我们的体温计还采用了主从设计,会扫描我们的另一个电子表产品用于将体温发送到那个产品上显示,扫描...原创 2020-08-22 15:43:12 · 1076 阅读 · 1 评论 -
点阵墨水屏的使用以及图像预处理
我们电子日历的产品,屏幕分辨率为480*648,使用的是单色位图,只有黑白两色,每个位都能表示一个像素点。所以对于这个屏幕而言,要显示一整幅图,需要的字节数为 480*648/8。然后,由于屏幕需要的只是像素点,所以不能直接将一个位图数据写进去,需要预先转换一下。 ...原创 2020-06-22 22:20:35 · 3736 阅读 · 4 评论 -
简易异步timer、一个基本的程序运行框架和中断处理程序
此文有重大BUG,稍后有空了更新 -_-|| 12月20日已修复所有已知问题。 一般的情况下,低功耗蓝牙芯片由于要保持低功耗工作,本身会提供一种轻度休眠模式,在这种模式下保持内核时钟继续运行以定期进行广播或交换连接数据。SDK中一般都会提供一个基于BLE内核时钟的timer,这个timer在CPU轻度休眠的时候,仍然可以继续工作,功能非常强大。但是在非BLE的CP...原创 2019-10-03 22:41:17 · 875 阅读 · 0 评论 -
Dialog OTA方案梳理以及小包传输改造
Dialog 14585 OTA采用双备份方案,对外接口以一个单独的Service(0xF5FE,不使用他们的手机app进行OTA的话,也可以改为自己定义的UUID)嵌入到用户的应用中。 如下图中,整个OTA方案包含一个ProductHeader和2个Image,每个image中又有一个ImageHeader,用来存储image信息,其中ProductHeader...原创 2019-09-15 14:54:51 · 1283 阅读 · 0 评论 -
针对ARM处理器的C语言优化
这是一篇读书笔记:《ARM嵌入式系统开发——软件设计与优化》稍后记得将前边贴出的代码照此规则处理一遍!数据类型优化:1.局部变量类型尽量申明为32位甚至是64位,来避免寄存器(32位)装载数据时进行位扩展,并减少编译器可能增加的边界检查代码;2.访问数组的时候,尽量使用指针增量而不是数组下标(避免产生额外的指令);3.函数的参数和返回值使用int类型(而不是8位或者16位)更有效,避...原创 2019-09-03 19:31:25 · 469 阅读 · 0 评论 -
生成Nordic DFU升级ZIP包和混合HEX烧录包以及使用python脚本实现自动打包
Nordic的大部分蓝牙芯片,其打包方式都是差不多的,这里贴出我整理好的打zip升级包和hex混合烧录包的步骤,主要使用Nordic官方的打包工具nrfutil。打包的时候,有几个重要的东西,包括private key,bootloader等需要先准备好。 nrfutil的所有合法的命令和参数都可以通过“nrfutil pkg generate --help”命令...原创 2019-08-29 17:26:38 · 1753 阅读 · 1 评论 -
Dialog SDK中app_easy_timer的大坑
我们的电子表产品有一个墨水屏,整个系统使用Dialog14585芯片来驱动,每秒都会尝试刷新屏幕。墨水屏有一个特点是,就算是断电了,屏幕还是能正常显示出内容的。中间有几次发现,屏幕彻底不动了,看起来是程序死机了,但是蓝牙仍然正常工作,说明没有死机。 开始找问题。我设计的应用架构,是通过一个全局的timer来驱动各种测温湿度、刷新屏幕、存储数据和更新广播内容等逻辑的...原创 2019-08-04 19:26:07 · 1458 阅读 · 0 评论 -
传输notification的一些问题
目前大部分BLE芯片都支持BLE 4.2 协议,默认情况下,不论是read/write 还是notify等操作每次传输最长不超过23个字节,其中有三个字节是头,所以有效的容量是20个字节。 对于Dialog14585而言,通过修改max_mtu可以使最大长度达到247字节(蓝牙4.2 为247,蓝牙5.0为 512),但是传输的数据多了,相应的传输每个包所需要的时...原创 2019-08-04 19:47:33 · 913 阅读 · 0 评论 -
Dialog 14585 广播中设备名称的问题
有一段日子,发现电子表的蓝牙广播中无法识别出设备名称了。后来经过烧脑的调试,发现原来是设备名称重复添加了。因为我们使用了米家的sdk,然后米家的sdk部分代码照抄了原厂的sdk,又没有做好兼容工作。在使用米家sdk设置或者修改广播数据的时候,需要同时提供adv_data和scan_resp_data,然后我往scan_resp_data中添加了我们的设备名称,然后就不广播了,因为原厂的s...原创 2019-08-04 20:17:52 · 834 阅读 · 0 评论 -
Nordic fds 文件系统源码探究
项目中使用到了flash,而Nordic为操作flash准备了很丰富的工具,包括fstorage 和fds,两者都是异步返回真实操作结果的,其中fds依赖于fstorage,是一个简单易用的文件系统。 使用fds之前一般都需要初始化一下,包括使用 fds_register 函数来注册一个事件回调,用来获得异步操作的结果。然后还需要使用 fds_init 函...原创 2019-08-08 20:04:46 · 2172 阅读 · 1 评论 -
使用宏来简化在Nordic 的sdk中添加蓝牙Service和attribute
Nordic的SDK做的很好,但是他们一副生怕有什么地方做的不到位一样, 很多简单的功能代码却写的很复杂,如果是java还好,但是C语言实现起来,很多地方的代码读起来特别费劲。我在添加自己的服务的时候,没有仿照他们的示例格式去定义,而是重新处理了一下,由于复用了大量的代码,比示例程序更容易理解和阅读。 核心代码使用两个宏来定义,一个是向Service添加attri...原创 2019-08-12 16:56:54 · 1330 阅读 · 2 评论 -
Nordic的sdk中,使用app_scheduler执行蓝牙回调中的异步任务
刚接触的时候,碰到了一个问题,就是我们的某个蓝牙接口允许用户写入一些配置,然后我会将这些配置写到flash中保存起来。很简单的操作结果出错了,fds操作没有任何回调,问题在哪儿呢? 我以为是fds的操作有问题,写了测试代码,结果测试代码跑的好好的,有回调!问题很明显,必然是执行的上下文环境有问题。 前边研究fds的源码中有提到,使用fds,初始化操...原创 2019-08-18 11:13:57 · 1758 阅读 · 0 评论 -
记一次有趣的LED闪屏消除及模拟PWM降低尖峰电流
我们的体温计项目中,显示屏上边有背光可以点亮。硬件的同事在设计的时候,最开始是直接将led接到了回路上。当电压变化的时候,会导致led的亮度跟随变化。我们的产品上使用的电池是1620,驱动能力不足,当时用saadc采集温度或者广播、扫描等操作的时候,都会产生较大的电流,使电路上出现无法忽视的压降,于是led也不停的闪烁~ 出于成本上的考虑,硬件最初不同意做任...原创 2019-08-22 19:56:54 · 1219 阅读 · 1 评论 -
蓝牙MCU开发之旅:不后悔踏进这个深坑
去年年初的时候,由于公司的大神离开了,小公司没有冗余的人员,一下子没有能做固件的人了。恰逢我司的app逐渐转移到米家的插件上去了,在美女领导一番蛊惑下,无知的我踏入了固件开发这个深坑。 前些日子因为一些原因险些不得不离职,因为公司目前只有我一个人熟悉蓝牙芯片的固件开发,会导致很多项目delay。后来想了想,决定将自己这一年来从android转mcu开发的经验写一写...原创 2019-08-04 18:32:14 · 5532 阅读 · 9 评论 -
二分法遍历 flash
Dialog的sdk没有提供类似fds的这种文件操作系统,DA14585 的话基本上也用不着。目前原生的dialog sdk中,仅提供了一个叫做 spi_flash的库函数,用于基本的flash操作。我在我们的一个产品中,设计数据存储结构的时候,分配了50页(50*4096Byte)用来存储不间断实时记录的温度数据,当存储的数据量超过50页的记录上限后,就会擦除第一页,在这一页继续...原创 2019-08-29 14:32:44 · 642 阅读 · 1 评论