Wi-Fi IoT套件連PCF8563實現電子鐘功能

Wi-Fi IoT套件連PCF8563實現電子鐘功能

        首先跟一樣新入手單片機開發的小夥伴分享一點I2C通訊的知識。我估計大部分入手開發板的小夥伴都有必定程序開發的能力,可是底層開發多是新接觸,我看有的小夥伴配置開發環境都有障礙,其實並非多複雜,只是首次接觸很陌生罷了,大膽試,多搞幾次就輕鬆應對了。ide

 

        通訊開發是單片機主要開發內容,通訊方式和協議有不少種,針對應用場景和模塊的狀況選用合適的協議。各類協議大同小異,開始瞭解通透一種,理解其思想,其餘協議也就很容易理解了。函數

 

Wi-Fi IoT套件連PCF8563實現電子鐘功能

        若是是第一次看到這種圖是否是有點懵。post

        大概過程就是:學習

        1. 發送一段模塊地址信息 + 讀/寫。spa

            等待…翻譯

            模塊若是收到,會給你個回覆 ACK指針

        2. 你看到ACK響應,進行下一步orm

            再發送一段,讀/寫寄存器地址信息。blog

            模塊收到,再給你回覆ACK接口

         3. 若是是寫,就再發送寫的內容信息。

            若是是讀,就接收模塊發送來的返回信息。

 

        換個現實場景理解一下,假設你喊你室友幫你取快遞:

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

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

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

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

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

 

        整個通訊過程就是一問一答,雙方不能同時問答,一方說話一方只能接聽。固然具體過程還要複雜一些,好比接收信息也要給模塊回覆應答,可是主體過程就是這樣的。這個過程大概瞭解一下就行,全部通訊的細節部分都已經被鴻蒙下的函數封裝好了,具體過程交由鴻蒙作就好,你只須要考慮要說什麼作什麼就好了。這個過程真的好簡單。

 

        看一下鴻蒙真對WifiIoT智能設備提供的I2C相關函數:

        將數據寫入I2C設備。

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

        在i2c.h文件裏有詳細的說明,這裏複製過來一一對照看一下每一個參數的意義。

 

        將數據寫入I2C設備。

        id表示I2C設備id。

        deviceAddr表示I2C設備地址。

        i2cData表示指向要寫入的數據描述符的指針。

        若是操做成功,返回WIFI_IOT_ SUCCESS;

        不然返回在wifiiot_errno.h中定義的錯誤代碼。

      (百度翻譯仍是很準確的哦!哈)

 

        從I2C設備讀取數據。

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

 

        讀取的數據將保存到i2cData指定的地址。

        id表示I2C設備id。

        deviceAddr表示I2C設備地址。

        i2cData表示指向要讀取的數據描述符的指針。

        若是操做成功,返回WIFI_IOT_ SUCCESS;

        不然返回在wifiiot_errno.h中定義的錯誤代碼。

 

        鴻蒙把I2C所使用的數據封裝在一個結構體中。咱們只須要把數據寫入到這個結構體中,而後讓函數本身處理就能夠了。

 

typedef struct {
    /** Pointer to the buffer storing data to send */
    unsigned char *sendBuf;
    /** Length of data to send */
    unsigned int  sendLen;
    /** Pointer to the buffer for storing data to receive */
    unsigned char *receiveBuf;
    /** Length of data received */
    unsigned int  receiveLen;
} WifiIotI2cData;

        

        定義I2C數據傳輸屬性。

        指向存儲要發送的數據的緩衝區的指針

        unsigned char *sendBuf;

        要發送的數據長度

        unsigned int  sendLen;

        指向用於存儲要接收的數據的緩衝區的指針

        unsigned char *receiveBuf;

        接收數據的長度

        unsigned int  receiveLen;

 

        具體用的時候,咱們能夠根據實際狀況再封裝一下。這是主要根據使用場景和模塊所提供的功能。我針對我要使用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 是PHILIPS 公司推出的一款工業級內含I2C 總線接口功能的具備極低功耗的多功能時鐘/日曆芯片。PCF8563 的多種報警功能、定時器功能、時鐘輸出功能以及中斷輸出功能能完成各類複雜的定時服務,甚至可爲單片機提供看門狗功能。是一款性價比極高的時鐘芯片,它已被普遍用於電錶、水錶、氣表、電話、傳真機、便攜式儀器以及電池供電的儀器儀表等產品領域。

Wi-Fi IoT套件連PCF8563實現電子鐘功能

        PCF8563並非咱們套件裏所帶的模塊,只是趕巧我手上恰好有這麼個模塊。官方套件提供的模塊有限,可是涵蓋了單片開發的全部應用場景,若是每一個模塊都認真走一遍,那麼基本解鎖了鴻蒙單片機開發的全部知識了。在實際應用中,咱們仍是要使用各類功能的電子模塊來實現更有趣的功能的。因此之後仍是要更多嘗試新模塊的使用,也能提升鴻蒙系統的應用範圍。


文章後續內容和相關附件能夠點擊下面的原文連接前往學習
原文連接:https://harmonyos.51cto.com/posts/2962#bkwz



想了解更多關於鴻蒙的內容,請訪問:

51CTO和華爲官方戰略合做共建的鴻蒙技術社區

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

相關文章
相關標籤/搜索