当前位置: 首页 > 科技观察

Harmonyos开发了一款连接PCF8563的Wi-Fi物联网套件,实现了电子时钟功能

时间:2023-03-17 19:38:01 科技观察

更多信息请访问:Harmonyos.51cto.com/#zz初接触同样是单片机开发新手的朋友们分享一点I2C通信的知识。我估计大部分从开发板入手的小伙伴都有一定的程序开发能力,但是底层开发可能是新接触。我觉得有些小伙伴在配置开发环境的时候遇到了障碍。其实也不是很复杂,只是第一次接触很陌生。仅此而已,大胆尝试一下,多来几次就好办了。通信开发是单片机的主要开发内容。通信方式和协议有很多种,根据应用场景和模块的情况选择合适的协议。各种协议都是大同小异的,如果你开始了解一个,理解它的思想,其他的协议就很容易理解了。如果是第一次看到这种画面,是不是有点一头雾水?大概过程是:1.发送一条模块地址信息+读/写。等等……如果模块收到了,会给你回复ACK2。当看到ACK响应时,继续下一步,发送另一段来读/写寄存器地址信息。模块收到后会回复ACK3给你。如果写入,则重新发送写入的内容信息。如果读取到,就会收到模块发送的返回信息。让我们在另一个现实场景中理解它。假设你打电话给室友帮你取快递:你:三胖!(发送模块地址)三胖子:你在干什么。(回答ACK)你:给我拿个快递。(发注册地址)三胖:好的。(回答ACK)你:收到你室友的快递。(接收信息)整个沟通过程就是一问一答。双方不能同时提问和回答。一方只能在发言时回答。当然具体流程比较复杂,比如接收信息,回复模块,但是主要流程是这样的。大致了解这个过程就够了。通信的所有细节都被鸿蒙下的函数封装了。具体过程留给鸿蒙。你只需要考虑说什么和做什么。这个过程真的很简单。看看鸿蒙真为WifiIoT智能设备提供的I2C相关功能:向I2C设备写入数据。unsignedintI2cWrite(WifiIotI2cIdxid,unsignedshortdeviceAddr,constWifiIotI2cData*i2cData);i2c.h文件中有详细说明,复制到这里查看各个参数的含义。向I2C设备写入数据。id表示I2C设备ID。deviceAddr表示I2C设备地址。i2cData表示指向要写入的数据描述符的指针。如果操作成功,返回WIFI_IOT_SUCCESS;否则返回wifiiot_errno.h中定义的错误代码。(百度翻译还是很准确的!哈)从I2C设备读取数据。unsignedintI2cRead(WifiIotI2cIdxid,unsignedshortdeviceAddr,constWifiIotI2cData*i2cData);读取的数据会保存到i2cData指定的地址。id表示I2C设备ID。deviceAddr表示I2C设备地址。i2cData表示指向要读取的数据描述符的指针。如果操作成功,返回WIFI_IOT_SUCCESS;否则返回wifiiot_errno.h中定义的错误代码。鸿蒙将I2C使用的数据封装在一个结构体中。我们只需要将数据写入这个结构体,让函数自己处理即可。Iunsignedchar*sendBuf指针,指向缓冲区,用于存放要发送的数据;待发送数据的长度unsignedintsendLen;指向缓冲区的指针,用于存储要接收的数据unsignedchar*receiveBuf;接收数据的长度unsignedintreceiveLen;我们可以根据实际情况重新打包。这主要是根据模块提供的使用场景和功能。我为我想与PCF8563模块一起使用的I2C进程做了一个小包装。你可以看看我写的代码,说不定能给你一些启发。看我的代码。在这个开发过程中,也用到了GPIO引脚中断。很多老师专门写了按键的中断触发器。我也仔细研究了一下,然后做了我程序的触发控制。老师的文章写的太详细了,一点看头都没有。再说明一下,我在使用中没遇到过什么问题,最多就是把看门狗功能关掉,不然会重启,传输暂时中断时用的就是这个方法。GpioSetIsrMask(WIFI_IOT_IO_NAME_GPIO_8,0);普通GpioSetIsrMask(WIFI_IOT_IO_NAME_GPIO_8,1);暂停ADC模数转换在使用OLED模块上的按钮时,遇到了ADC功能。这里有个铺垫,主要是鸿蒙下的ADC方式还没有实现。研究清楚了,数模转换的应用场景也很多,以后用了专门的模块以后,把心得好好记下来吧。暂时看老师的代码可以如猫如虎,但有时会不稳定。PCF8563是比较常用的模块。PCF8563是飞利浦推出的一款具有极低功耗和I2C总线接口功能的工业级多功能时钟/日历芯片。PCF8563的各种报警功能、定时器功能、时钟输出功能和中断输出功能可以完成各种复杂的定时服务,甚至可以为单片机提供看门狗功能。是一款性价比较高的时钟芯片,已广泛应用于电表、水表、煤气表、电话机、传真机、便携式仪器和电池供电的仪器仪表等产品领域。PCF8563不是我们套件中的模块,但我手上恰好有这样的模块。官方套件提供的模块有限,但涵盖了单片机开发的所有应用场景。如果每个模块都认真过一遍,基本就能解开鸿蒙单片机开发的所有知识点。在实际应用中,我们还是需要使用功能多样的电子模块来实现更多有趣的功能。所以未来我们还是需要尝试更多新的模块,这样也可以提升鸿蒙系统的应用范围。之前开发过AHT20温湿度模块和SSD1306模块,所以开发PCF8563的过程就变得非常简单。很多内容是重叠的,整体的思路也是相通的,所以过程就变得很轻松。任何模块入门的第一步都是阅读其技术手册,了解功能寄存器的配置。看说明书的过程很枯燥。只有坚持通读手册,这个模块才能真正属于你。我要实现的功能是一个时钟功能,然后根据需求和流程写了大量的日志代码,测试一下,然后整理代码,最后归结为2部分,一部分是设置时间,另一部分是阅读时间。结束了!当你有写时钟的能力时,你就有了各种计时能力,比如写万年历,做股票投资时间报告等等。我从一部电影中得到灵感,做了一个计时时钟,看看时间的飞速流逝。它会让看时钟的人感到压力并治愈拖延症吗?但事实证明,除了无聊之外,它没有任何用处。PCF8563模块可以输出时钟信号。我开始想象通过Hi3861的一个端口接收时钟信号模块发送的周期性低电平,设置间隔为1秒,触发中断,然后读取模块的时间信息,发送给上面显示的OLED。这将每1秒显示一次。OLED模块上有2个按钮,我想用它们来实现时间设置功能。这两个按钮非常有趣。通过一个端口接收信号,通过测试信号的电压强弱来区分哪个按钮再次工作。这时候就需要通过ADC来实现了。(坑王艾希已经上线了,我开玩笑的。)数模转换功能不能通过2个端口实现吗?当然不是,这可能就是本开发板设计的初衷,就是让你充分学习以后可能遇到的所有知识。闲话少说,新姿势解锁。通过2个按键实现功能控制:早期的机械电脑都是用齿轮来切换功能,比如arrangable发音盒,有一种arrangable,中间的转子可以针对每个音节进行调整,实现排列功能,太高级了不,没有找到图片。我借鉴了这个工作原理,实现了2个按钮的复杂控制。按键功能实现原理同那个档位。S1驱动齿轮的大齿轮,它有9个齿。按一次,转动1齿,来回循环。每颗牙齿与1个功能相关联。S2驱动齿轮组的7个小齿轮,每个小齿轮对应1个时间值。当然,这不是唯一的控制方法,你还可以做一个大数组什么的,只是一种方法。gear=9正常时间显示gear=0进入设置状态gear=1秒setgears[0]candrivegears=2minutesetgears[1]candrivegears=3setgears[2]candrivegears=4daysettingsgears[3]candrivegear=5weekssetgears[4]candrivegear=6monthssetgears[5]candrivegear=7yearssetgears[6]candrivegear=8将设定值输入timeModulegear=9正常时间显示因为不是套件中的一个模块,所以简单说一下主程序的工作结构。1.所有功能都已初始化并准备就绪。2.做中断触发,每按一次齿轮,齿轮加1,如此循环。3.建立一个主循环,所有的工作都在这个循环中进行。4.根据档位的值,调用执行不同的功能。结束了!谢谢。~哈看看代码,代码写的像流水账,懒得改了,欢迎指正,有问题欢迎追问。随着代码写的越来越多,我也觉得C语言的知识太少了。我再好好看看C教程,希望以后写的代码会更好。?版权归作者和HarmonyOS技术社区共同所有。如需转载请注明出处,否则将追究法律责任。了解更多请访问:与华为官方共建鸿蒙科技社区https://harmonyos.51cto.com/#zz