1. 程式人生 > >ESP8266-SDK中I2C的使用

ESP8266-SDK中I2C的使用

一、ESP8266提供了一個模擬的I2C 的介面檔案

可以參考8C-ESP8266__Interface_I2C__CN_v0.2.pdf文件和 i2c_master.c檔案 

二、關於I2C 的初始化

1、這裡 我認為 大家對I2C 協議都是有一定的認識瞭解的。

2、I2C 協議的幾個過程 我們可以開啟i2c_master.h 檔案看它提供的介面

void i2c_master_stop(void);

作用:主機產生I2C停止條件

void i2c_master_start(void);

作用:主機發送開始訊號

uint8 i2c_master_getAck(void);

作用:主機獲取從機的應答訊號

uint8 i2c_master_readByte(void);

作用:主機讀一個位元組

void i2c_master_writeByte(uint8 wrdata);

作用:主機寫一個位元組的訊號

void i2c_master_send_ack(void);

作用:主機發送應答

void i2c_master_send_nack(void);

作用:主機發送非應答

void i2c_master_gpio_init(void);

作用:

1、選擇pin管腳 ,配置GPIO 這個GPIO 預設是 GPIO4 和GPIO2  

在i2c_master.h 檔案可以看到

#define I2C_MASTER_SDA_MUX PERIPHS_IO_MUX_GPIO2_U
#define I2C_MASTER_SCL_MUX PERIPHS_IO_MUX_GPIO0_U
#define I2C_MASTER_SDA_GPIO 2
#define I2C_MASTER_SCL_GPIO 0
#define I2C_MASTER_SDA_FUNC FUNC_GPIO2
#define I2C_MASTER_SCL_FUNC FUNC_GPIO0

上面是系統預設的,如果我們想改成自己器件對應的管腳 就只要改動這裡就可以了,下面是我自己的I2C器件對應的管腳

#define I2C_MASTER_SDA_MUX PERIPHS_IO_MUX_GPIO0_U
#define I2C_MASTER_SCL_MUX PERIPHS_IO_MUX_GPIO4_U
#define I2C_MASTER_SDA_GPIO 0
#define I2C_MASTER_SCL_GPIO 4
#define I2C_MASTER_SDA_FUNC FUNC_GPIO0
#define I2C_MASTER_SCL_FUNC FUNC_GPIO4

從上面可以看到  我是用GPIO4做時鐘的 GPIO0做資料線的 ,而預設的時候是 GPIO0做時鐘 GPIO2做資料的

2、配置GPIO為開漏,---這一點非常重要  如果自己模擬寫,不配置GPIO為開漏,會導致失敗的

3、初始化sda和SCL為高電平 釋放匯流排

三、示例程式碼----一個簡單的



i2c_master_start();
i2c_master_writeByte(0xA0);
flag = i2c_master_getAck();
os_printf("Ack = %d\r\n",flag);
i2c_master_writeByte(5);//傳送地址的低8位    鐵電是2K位元組的大小
flag = i2c_master_getAck();
os_printf("Ack1 = %d\r\n",flag);
i2c_master_writeByte(0x55);
flag = i2c_master_getAck();
os_printf("Ack2 = %d\r\n",flag);
i2c_master_stop();
os_delay_us(100);




i2c_master_start();
i2c_master_writeByte(0xA0);
flag = i2c_master_getAck();
os_printf("Ack = %d\r\n",flag);
i2c_master_writeByte(5);//傳送地址的低8位    鐵電是2K位元組的大小
flag = i2c_master_getAck();
os_printf("Ack = %d\r\n",flag);
i2c_master_start();
i2c_master_writeByte(0xA1);
flag = i2c_master_getAck();
os_printf("Ack = %d\r\n",flag);
flag =  i2c_master_readByte();
os_printf("資料 = %x\r\n",flag);
i2c_master_send_nack();
i2c_master_stop();

總結:如果我們自己想自己寫模擬i2C的一定要把GPIO設定為開漏,如果和自己的管腳不一樣 只要修改,如下的GPIO就可以了,其它的都不要修改

#define I2C_MASTER_SDA_MUX PERIPHS_IO_MUX_GPIO0_U
#define I2C_MASTER_SCL_MUX PERIPHS_IO_MUX_GPIO4_U
#define I2C_MASTER_SDA_GPIO 0
#define I2C_MASTER_SCL_GPIO 4
#define I2C_MASTER_SDA_FUNC FUNC_GPIO0
#define I2C_MASTER_SCL_FUNC FUNC_GPIO4

相關推薦

ESP8266-SDKI2C的使用

一、ESP8266提供了一個模擬的I2C 的介面檔案 可以參考8C-ESP8266__Interface_I2C__CN_v0.2.pdf文件和 i2c_master.c檔案  二、關於I2C 的初始化 1、這裡 我認為 大家對I2C 協議都是有一定的認識瞭解的。 2、I

Microsoft dynamic sdkjoin應該註意的問題.

per order 問題 bean lec note exp amp collect QueryExpression queryNextSeq = new QueryExpression { EntityName =

1-添加自己的Lua執行函數(ESP8266-SDK開發(lua版本))

圖片 自己的 sprint ret amp nbsp pri number 技術分享 基礎 lua_pushnumber (L, 1); lua_pushnumber (L,3); lua_pushnumber (L,4); return 3; c_sprin

判斷SDK的DLL位數(32位還是64位)

1.用文字文件開啟DLL,開啟後是一堆亂碼 2.鍵盤敲下“Ctrl+F”,輸入“PE”,區分大小寫 3.找到PE後,他的後面如果是 L => 32 位                     &nb

Opencv AiDitron 2.0 SDK 關於概率圖的解讀

場景 現在要識別這張圖片中,哪些畫素點屬於牛奶,哪些屬於奶牛,哪些屬於綠葉,概率在這裡的意思是一個畫素點屬於牛奶、奶牛或綠葉的概率(可能性,值在 0 到 1 之間),那麼一個畫素點就會有 3 個概率,分別是對應屬於牛奶、屬於奶牛或屬於綠葉的概率,這些是我們程式設計師看的到,多通道。給客

intel電源管理技術I2C和SVID

1.I2C匯流排架構圖:  2.Gemini Lake 平臺所支援的PMIC 是哪種型別?     POR 是SVID PMIC, i2c PMIC 會影響效能。 3.SerialVID, 總共有三個訊號線 時鐘(clock) , 訊號(data) Al

ESP8266 micropython 驅動 I2C LCD1602 液晶

折騰香橙派這種還是做電腦使用,拿來做小控制器實在大才小用,某天閒逛 發現竟然可以這麼玩。。。。 原來不玩開發板就是因為不喜歡C ,實在是學不會啊,現在竟然python。。。雖然是裁剪版的。。。 那也是不錯的   螢幕買的是一個1602的LCD,因為原來迷迷糊糊的記得51

第三方SDK的巨坑

開發中經常會使用第三方SDK,尤其是那些看不到原始碼的SDK。出現了崩潰真是無處下手。由於最近又遇到一個之前遇到的錯誤,今天分享一下: 執行程式會出現如下錯誤資訊: was compiled with optimization - stepping may behave oddly;

iOS如何在SDK使用資原始檔(xib,image,localizable string...)

需求:在SDK中使用資原始檔,例如xib, image, 字串國際化等等. 閱讀前提: 瞭解如何建立SDK 瞭解如何在一個專案中匯入並使用SDK GitHub地址(附程式碼) : 如何在SDK中使用資原始檔 簡書地址 : 如何在SDK中使用資原始檔 部落格地址 : 如何在S

海思3518EV200 SDK獲取和儲存H.264碼流詳解

1 /****************************************** 2 step 2: Start to get streams of each channel. 3 ************************************

SDK.a包過大,單獨作為一個項目,功能項目引入SDK項目文檔 及Search Paths相關參數說明

選中 none 打開 目的 每次 創建文件 sdk shu com SDK包過大,單獨作為一個項目 項目中使用第三方的SDK包(例如所有的.a文件1G多),導致項目整體過大,這個時候就可以把第三方的.a文件單獨作為一個項目。 每次自動化打包都要從git拉去項目,不用每次都拉

Vue怒踩微信JS-SDK配置的坑 - 簽名錯誤

前言 這幾天公司需要做微信端h5專案,需要用到微信掃一掃功能,就需要涉及到配置微信JS-SDK的問題,怎麼配置怎麼生成簽名這邊就不說了官方文件(https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115)都說的比較詳

[基礎篇]ESP8266-SDK教程(零)之認識並了解

移植 感覺 手機 微信小程序 科技 想法 操作 更新 onos 從今天開始就要開始在博客園灌水了,因為本人從事物聯網相關的行業,所以對物聯網還算有一定的了解和認識,目前主要做LoRa這一塊的應用,不過這個系列文章不是關於LoRa的,主要是關於ESP8266開發的,這也算是個

[網路篇]ESP8266-SDK教程(五)之SmartConfig、Airkiss等多種配網方式

在前面網路篇TCP通訊中,我們用到了Wi-Fi功能,但是沒有細講,今天我們在這篇文章中仔細探討一下ESP8266的Wi-Fi聯網過程,以及各種方式的配網過程是如何實現的。文章中難免有疏漏或不正確的地方,如遇不正確的表述還請指出,本系列文章現在在知乎和簡書同步更新。 IAMLIUBO-知乎專欄 IAMLIU

ESP8266 SDK Makefile分析

主要內容 本章我們來分析SDK中的Makefile,同時學習如何建立自己的原始碼資料夾。 預備知識 一份程式碼工程編譯成二進位制可執行檔案,需要經過四個步驟:預處理、編譯、彙編和連結。 進行編譯需要有編譯器,Linux環境下使用的是gcc,而對應的,ESP8266使用

Android SDK的自動化測試

Android中的測試手段非常豐富。通常上,按測試執行環境來劃分,可以分為本地單元測試與Instrument測試: 執行環境 測試型別 PC機 本地Unit Test

Revit 2014 SDK例子整理 (一)

1.AddSpaceAndZone創造空間和區域 1.1在指定層獲取所有空間元素 1.2在指定層獲取所有區域元素 1.3為封閉的牆封閉空間建立空間元素 1.4在指定層和階段建立區域元素 1.5在zone元素中新增,刪除sp

利用WPF建立自己的3d gis軟體(非axhost方式)(十二)SDK的導航系統

先下載SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew 密碼:1te1 地圖資料包(sqlserver2008R2版本,也可以不下載):  https://pan.baidu.com/s/1PjcNamad7OVpCrsV

ESP8266-SDK開發入坑(四)- STATION模式

記一個慘痛教訓,務必記得即時儲存檔案。(這次不是丟了,而是無法build)。切記,切記,eclipse修改後務必ctrl+s然後clean 然後再build! 1、實驗目的 瞭解SDK開發的STA模式操作方法,熟悉相關API函式。 2、函式解

利用WPF建立自己的3d gis軟體(非axhost方式)(十一)SDK的動畫系統

先下載SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew 密碼:1te1 地圖資料包(sqlserver2008R2版本,也可以不下載):  https://pan.baidu.com/s/1PjcNamad7OVpCrsV