自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

鴻蒙通信開發(fā)Wi-Fi IoT套件連PCF8563實(shí)現(xiàn)電子鐘功能

開發(fā)
首先跟同樣新入手單片機(jī)開發(fā)的小伙伴分享一點(diǎn)I2C通信的知識。我估計(jì)大部分入手開發(fā)板的小伙伴都有一定程序開發(fā)的能力,但是底層開發(fā)可能是新接觸,我看有的小伙伴配置開發(fā)環(huán)境都有障礙,其實(shí)并不是多復(fù)雜,只是首次接觸很陌生罷了,大膽試,多搞幾回就輕松應(yīng)對了。

想了解更多內(nèi)容,請?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com/#zz

首先跟同樣新入手單片機(jī)開發(fā)的小伙伴分享一點(diǎn)I2C通信的知識。我估計(jì)大部分入手開發(fā)板的小伙伴都有一定程序開發(fā)的能力,但是底層開發(fā)可能是新接觸,我看有的小伙伴配置開發(fā)環(huán)境都有障礙,其實(shí)并不是多復(fù)雜,只是首次接觸很陌生罷了,大膽試,多搞幾回就輕松應(yīng)對了。

通信開發(fā)是單片機(jī)主要開發(fā)內(nèi)容,通信方式和協(xié)議有很多種,針對應(yīng)用場景和模塊的情況選用合適的協(xié)議。各種協(xié)議大同小異,開始了解通透一種,理解其思想,其他協(xié)議也就很容易理解了。


如果是第一次看到這種圖是不是有點(diǎn)懵。

大概過程就是:

1. 發(fā)送一段模塊地址信息 + 讀/寫。

等待…

模塊如果收到,會給你個(gè)回復(fù) ACK

2. 你看到ACK響應(yīng),進(jìn)行下一步

再發(fā)送一段,讀/寫寄存器地址信息。

模塊收到,再給你回復(fù)ACK

3. 如果是寫,就再發(fā)送寫的內(nèi)容信息。

如果是讀,就接收模塊發(fā)送來的返回信息。

換個(gè)現(xiàn)實(shí)場景理解一下,假設(shè)你喊你室友幫你取快遞:

你:三胖子!(發(fā)送模塊地址)

三胖子:干啥。(接聽ACK)

你:給我取份快遞。(發(fā)送寄存器地址)

三胖子:好的。(接聽ACK)

你:接收室友給你送來的快遞。(接收信息)

整個(gè)通信過程就是一問一答,雙方不能同時(shí)問答,一方說話一方只能接聽。當(dāng)然具體過程還要復(fù)雜一些,比如接收信息也要給模塊回復(fù)應(yīng)答,但是主體過程就是這樣的。這個(gè)過程大概了解一下就行,所有通信的細(xì)節(jié)部分都已經(jīng)被鴻蒙下的函數(shù)封裝好了,具體過程交由鴻蒙做就好,你只需要考慮要說什么做什么就行了。這個(gè)過程真的好簡單。

看一下鴻蒙真對WifiIoT智能設(shè)備提供的I2C相關(guān)函數(shù):

將數(shù)據(jù)寫入I2C設(shè)備。

  1. unsigned int I2cWrite(WifiIotI2cIdx id, unsigned short deviceAddr, const WifiIotI2cData *i2cData); 

在i2c.h文件里有詳細(xì)的說明,這里復(fù)制過來一一對照看一下每個(gè)參數(shù)的意義。

將數(shù)據(jù)寫入I2C設(shè)備。

id表示I2C設(shè)備id。

deviceAddr表示I2C設(shè)備地址。

i2cData表示指向要寫入的數(shù)據(jù)描述符的指針。

如果操作成功,返回WIFI_IOT_ SUCCESS;

否則返回在wifiiot_errno.h中定義的錯(cuò)誤代碼。

(百度翻譯還是很準(zhǔn)確的哦!哈)

從I2C設(shè)備讀取數(shù)據(jù)。

  1. unsigned int I2cRead(WifiIotI2cIdx id, unsigned short deviceAddr, const WifiIotI2cData *i2cData); 

讀取的數(shù)據(jù)將保存到i2cData指定的地址。

id表示I2C設(shè)備id。

deviceAddr表示I2C設(shè)備地址。

i2cData表示指向要讀取的數(shù)據(jù)描述符的指針。

如果操作成功,返回WIFI_IOT_ SUCCESS;

否則返回在wifiiot_errno.h中定義的錯(cuò)誤代碼。

鴻蒙把I2C所使用的數(shù)據(jù)封裝在一個(gè)結(jié)構(gòu)體中。我們只需要把數(shù)據(jù)寫入到這個(gè)結(jié)構(gòu)體中,然后讓函數(shù)自己處理就可以了。

  1. typedef struct { 
  2.     /** Pointer to the buffer storing data to send */ 
  3.     unsigned char *sendBuf; 
  4.     /** Length of data to send */ 
  5.     unsigned int  sendLen; 
  6.     /** Pointer to the buffer for storing data to receive */ 
  7.     unsigned char *receiveBuf; 
  8.     /** Length of data received */ 
  9.     unsigned int  receiveLen; 
  10. } WifiIotI2cData; 

 定義I2C數(shù)據(jù)傳輸屬性。

指向存儲要發(fā)送的數(shù)據(jù)的緩沖區(qū)的指針

  1. unsigned char *sendBuf; 

要發(fā)送的數(shù)據(jù)長度

  1. unsigned int sendLen; 

指向用于存儲要接收的數(shù)據(jù)的緩沖區(qū)的指針

  1. unsigned char *receiveBuf; 

接收數(shù)據(jù)的長度

  1. unsigned int receiveLen; 

具體用的時(shí)候,我們可以根據(jù)實(shí)際情況再封裝一下。這是主要根據(jù)使用場景和模塊所提供的功能。我針對我要使用PCF8563模塊把I2C過程做了一點(diǎn)包裝。可以看看我寫的代碼,也許能給你一點(diǎn)啟發(fā)。參看我的代碼。

在這次開發(fā)過程中還用到了GPIO管腳中斷

很多老師都專門寫了按鍵的中斷觸發(fā),我也是仔細(xì)研讀然后做了我這個(gè)程序的觸發(fā)控制,老師的文章寫的太詳細(xì)了,實(shí)在沒什么好再說明的,我在使用中也沒有遇到什么問題,最多就是,要關(guān)閉看門狗功能,否者會重啟,再就是當(dāng)暫中斷發(fā)的時(shí)候用到這個(gè)方法。

  • GpioSetIsrMask(WIFI_IOT_IO_NAME_GPIO_8, 0); 正常
  • GpioSetIsrMask(WIFI_IOT_IO_NAME_GPIO_8, 1); 暫停

ADC模數(shù)轉(zhuǎn)換

用到OLED模塊上的按鍵的時(shí)候碰到了ADC功能,這里先做個(gè)伏筆,主要是還沒把鴻蒙下的ADC方法研究明白,而且數(shù)模轉(zhuǎn)換應(yīng)用場景非常多,以后用到專門的模塊再仔細(xì)寫寫心得吧。暫時(shí)看老師們的代碼照貓畫虎也能運(yùn)行,有時(shí)候會不穩(wěn)定。

PCF8563是個(gè)比價(jià)常用的模塊。

PCF8563 是PHILIPS 公司推出的一款工業(yè)級內(nèi)含I2C 總線接口功能的具有極低功耗的多功能時(shí)鐘/日歷芯片。PCF8563 的多種報(bào)警功能、定時(shí)器功能、時(shí)鐘輸出功能以及中斷輸出功能能完成各種復(fù)雜的定時(shí)服務(wù),甚至可為單片機(jī)提供看門狗功能。是一款性價(jià)比極高的時(shí)鐘芯片,它已被廣泛用于電表、水表、氣表、電話、傳真機(jī)、便攜式儀器以及電池供電的儀器儀表等產(chǎn)品領(lǐng)域。


PCF8563并不是我們套件里所帶的模塊,只是趕巧我手上剛好有這么個(gè)模塊。官方套件提供的模塊有限,但是涵蓋了單片開發(fā)的所有應(yīng)用場景,如果每個(gè)模塊都認(rèn)真走一遍,那么基本解鎖了鴻蒙單片機(jī)開發(fā)的所有知識了。在實(shí)際應(yīng)用中,我們還是要使用各種功能的電子模塊來實(shí)現(xiàn)更有趣的功能的。所以以后還是要更多嘗試新模塊的使用,也能提高鴻蒙系統(tǒng)的應(yīng)用范圍。

前面已經(jīng)開發(fā)過AHT20溫濕度模塊,SSD1306模塊,所以再開發(fā)PCF8563的過程就變的很簡單。有很多內(nèi)容都是重疊的,整體思路也是相通的,所以過程變得非常輕松。

任何一個(gè)模塊上手第一步都是讀它的技術(shù)手冊,了解功能寄存器的配置。讀手冊的過程是枯燥的,只有堅(jiān)持把手冊讀透,那么這個(gè)模塊才算真正屬于你。

我想要實(shí)現(xiàn)的功能是一個(gè)時(shí)鐘功能,然后按需求和過程寫一大坨流水賬代碼,測試走通,再把代碼整理一下,最后歸結(jié)為2部分,一部分設(shè)置時(shí)間,一部分讀取時(shí)間。完了!

當(dāng)你擁有了一個(gè)寫時(shí)鐘的能力,你就擁有了各種計(jì)時(shí)的能力,比如寫個(gè)萬年歷,做個(gè)股票投資報(bào)時(shí),等等。我通過一部電影獲得靈感,做了一個(gè)到計(jì)數(shù)時(shí)鐘,看時(shí)間飛快的流逝,會不會讓看鐘的人有壓力感,治治拖延癥呢。但結(jié)果除了無聊一點(diǎn)用沒有。

PCF8563模塊可以輸出時(shí)鐘信號,我開始設(shè)想通過Hi3861的1個(gè)端口接收時(shí)鐘信模塊發(fā)出的周期性低電平,把間隔設(shè)定為1秒,觸發(fā)中斷,然后讀取模塊的時(shí)間信息,發(fā)送到OLED上顯示出來。這樣就能每隔1秒顯示一次。

OLED模塊上有2個(gè)按鍵,想通過它們實(shí)現(xiàn)時(shí)間設(shè)置功能。這個(gè)兩個(gè)按鍵很有趣,通過1個(gè)端口接收信號,通過測試信號的電壓強(qiáng)度來區(qū)分是那個(gè)按鍵再工作。這時(shí)候需要通過ADC能來實(shí)現(xiàn),(坑王艾希已經(jīng)上線,哈開玩笑。)數(shù)模轉(zhuǎn)換功能,難道不能通過2個(gè)端口來實(shí)現(xiàn)嗎?當(dāng)然不是,這可能是這套開發(fā)板設(shè)計(jì)的初衷,就是讓你充分學(xué)習(xí)未來可能遇到的所有知識。閑話少敘,又解鎖新姿勢了。

通過2個(gè)按鍵實(shí)現(xiàn)功能控制:早期機(jī)械計(jì)算機(jī)用齒輪實(shí)現(xiàn)功能的切換,比如可編曲發(fā)音盒,有一種可編曲的,中間轉(zhuǎn)子每個(gè)音節(jié)都可調(diào),實(shí)現(xiàn)編曲功能,那種太高級了,沒找到圖片。我借鑒這種工作原理,來實(shí)現(xiàn)2個(gè)按鍵的復(fù)雜控制。


按鍵功能實(shí)現(xiàn)的原理就跟那個(gè)齒輪是一樣的,S1驅(qū)動gear這個(gè)大齒輪,他有9齒,按一下,轉(zhuǎn)1齒,循環(huán)往復(fù),每一齒聯(lián)動1個(gè)功能。S2驅(qū)動gears組的7個(gè)小齒輪,每個(gè)小齒輪針對1個(gè)時(shí)間的值。當(dāng)然這不是唯一的控制方法,也可以做個(gè)大數(shù)組什么的,只是一種方法而已。

  • gear = 9 正常時(shí)間顯示
  • gear = 0 進(jìn)入設(shè)置狀態(tài)
  • gear = 1 秒設(shè)置 gears[0]可以驅(qū)動
  • gear = 2 分設(shè)置 gears[1]可以驅(qū)動
  • gear = 3 時(shí)設(shè)置 gears[2]可以驅(qū)動
  • gear = 4 日設(shè)置 gears[3]可以驅(qū)動
  • gear = 5 周設(shè)置 gears[4]可以驅(qū)動
  • gear = 6 月設(shè)置 gears[5]可以驅(qū)動
  • gear = 7 年設(shè)置 gears[6]可以驅(qū)動
  • gear = 8 將設(shè)置好的值輸入到時(shí)間模塊
  • gear = 9 正常時(shí)間顯示

因?yàn)椴皇翘准械哪K,我只簡單說一下主體程序工作結(jié)構(gòu)。

1. 所有功能先初始化,準(zhǔn)備好。

2. 做中斷觸發(fā),每按1次驅(qū)動gear加1循環(huán)往復(fù)。

3. 建1個(gè)主循環(huán),所有的工作就這個(gè)循環(huán)里了。

4. 針對gear的值,調(diào)用執(zhí)行不同的功能。

完了! 謝謝。~哈

看代碼吧,代碼寫的像流水賬,我也懶了改了,歡迎糾錯(cuò),有問題歡迎問。

隨著代碼越寫越多,也深感C語言知識太少。我會再好好看看C教程,希望以后寫的代碼,能更好些。

©著作權(quán)歸作者和HarmonyOS技術(shù)社區(qū)共同所有,如需轉(zhuǎn)載,請注明出處,否則將追究法律責(zé)任。

想了解更多內(nèi)容,請?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com/#zz

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2020-10-30 17:57:11

鴻蒙HiSpark

2020-10-23 09:50:15

HiSpark Wi-開發(fā)套件

2020-10-15 09:53:55

iSpark Wi-F開發(fā)套件板

2020-12-07 11:28:02

Wi-FiWi-Fi 6

2024-01-29 10:26:00

Wi-Fi

2011-11-28 14:36:41

2020-10-26 10:21:39

Wi-Fi IoT智能家居套件

2022-10-19 12:18:56

家庭智能設(shè)備Wi-Fi網(wǎng)絡(luò)

2016-01-13 10:45:57

Wi-FiHalow

2012-07-13 10:23:04

Wi-Fi

2020-11-04 13:20:14

HiSpark

2020-03-20 10:11:38

網(wǎng)絡(luò)安全數(shù)據(jù)技術(shù)

2012-07-04 10:49:54

Wi-Fi

2018-10-11 14:45:53

Wi-Fi無線通信網(wǎng)絡(luò)

2018-02-27 16:12:30

Wi-Fi

2016-11-02 15:23:06

華為

2020-04-08 16:09:37

機(jī)器學(xué)習(xí)Wi-Fi網(wǎng)絡(luò)

2018-03-29 16:34:05

Wi-Fi

2021-08-01 12:39:26

Wi-Fi 7網(wǎng)絡(luò)Wi-Fi 6
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號