事情比較多,停了幾天,到目前為止,事情依然很多……
從第一節(jié)到第九節(jié)(也就是這一節(jié)),說的都是ESP8266的基本應(yīng)用,例如GPIO、定時器、中斷、PWM等等。從后面開始,將陸續(xù)說一下基于網(wǎng)絡(luò)的用法,畢竟這是個聯(lián)網(wǎng)的芯片,還是要聯(lián)網(wǎng)玩,才更能體現(xiàn)它的特點。但偶爾,我可能還會說一下它的硬件的基本用法,例如ADC、SPI等,看情況吧,時間富裕與否~
好,這一節(jié),主要說一下ESP8266上面的IIC接口。是的,它有SPI接口,也有IIC接口。但I(xiàn)IC接口是使用GPIO模擬的,也就是說,你可以使用8266上的任意兩個GPIO模擬出IIC接口來。同時,每個管腳內(nèi)部都有上拉電阻,無需外接。
注:ESP8266只能用做IIC主設(shè)備,不能用做從設(shè)備。
那我們是否還要寫一堆IIC的start函數(shù)、stop函數(shù)?
不用,官方的SDK已經(jīng)給我們寫好了整個的IIC庫,只要配置好要用的管腳,直接調(diào)用函數(shù)即可,例如:
i2c_master_start(void);
i2c_master_stop(void);
i2c_master_writeByte(uint8 wrdata);
如何使用?很簡單,分四步:
1 添加相關(guān)源文件和頭文件
把i2c_master.c拷入app下的driver文件夾,把i2c_master.h拷入app下的include下的driver文件夾。
2 選擇要用到的GPIO
打開i2c_master.h文件,管腳選擇部分如下所示:
#defineI2C_MASTER_SDA_MUX PERIPHS_IO_MUX_GPIO2_U
#defineI2C_MASTER_SCL_MUX PERIPHS_IO_MUX_MTMS_U
#defineI2C_MASTER_SDA_GPIO 2
#defineI2C_MASTER_SCL_GPIO 14
#defineI2C_MASTER_SDA_FUNC FUNC_GPIO2
#defineI2C_MASTER_SCL_FUNC FUNC_GPIO14
通過這6個宏定義,配置好IIC接口要用的時鐘腳和數(shù)據(jù)腳,我這里想用GPIO12和14,所以改成如下的樣子:
#defineI2C_MASTER_SDA_MUX PERIPHS_IO_MUX_MTDI_U
#defineI2C_MASTER_SCL_MUX PERIPHS_IO_MUX_MTMS_U
#defineI2C_MASTER_SDA_GPIO 12
#defineI2C_MASTER_SCL_GPIO 14
#defineI2C_MASTER_SDA_FUNC FUNC_GPIO12
#defineI2C_MASTER_SCL_FUNC FUNC_GPIO14
關(guān)于管腳的名字,主要看eagle_soc.h文件。
3 初始化IIC管腳
通過下面的函數(shù)實現(xiàn):
i2c_master_gpio_init();
4 開始寫數(shù)據(jù)
用過24C02的童鞋都知道,IIC的寫操作,前后就幾步:開始信號、寫入設(shè)備地址、等待應(yīng)答、寫入存儲地址、等待應(yīng)答、寫入數(shù)據(jù)、結(jié)束信號。這里結(jié)合SDK中的例程IOT_DEMO中的IIC代碼,實現(xiàn)寫數(shù)據(jù)的函數(shù)如下:
boolICACHE_FLASH_ATTRWrite_IIC_Data(unsignedcharIIC_Data)
{
uint8 ack;
i2c_master_start();
i2c_master_writeByte(0x78); //D/C#=0; R/W#=0
ack = i2c_master_getAck();
if(ack) {
os_printf("addrnotackwhentxwritecmd ");
i2c_master_stop();
returnfalse;
}
i2c_master_writeByte(0x40); //write data
ack = i2c_master_getAck();
if(ack) {
os_printf("addrnotackwhentxwritecmd ");
i2c_master_stop();
returnfalse;
}
i2c_master_writeByte(IIC_Data);
ack = i2c_master_getAck();
if(ack) {
os_printf("addrnotackwhentxwritecmd ");
i2c_master_stop();
returnfalse;
}
i2c_master_stop();
}
上面代碼中出現(xiàn)的函數(shù),例如i2c_master_start()、i2c_master_writeByte(0x78)、i2c_master_getAck();等,都已經(jīng)在i2c_master.c中寫好了。換句話說,我們只需要像堆積木一樣,按照特定的順序把這些函數(shù)擺下來就行了。
so,是不是很簡單?
如何演示?
這里使用一個0.96寸的,帶有IIC接口的OLED屏幕。這類屏幕按照我見過的接口不同,分兩種:一種是4針的,只能接IIC接口;一種是7針的,既能接IIC,又能接SPI。我手里這個是7針的,出廠默認(rèn)SPI接口,怎么切換到IIC,我看了半天手冊:
看起來不難,當(dāng)我翻開我的液晶背面的時候,發(fā)現(xiàn)是這樣:
所以我只把SPI字符旁邊的電阻改到IIC旁邊就可以了。
程序使用賣家提供的代碼,做了一下移植。會用IIC的自然就懂了,不懂就說明你還沒學(xué)好IIC。
7針的接口,針腳功能如下:
雖然IIC只用到CLK和SDA兩個腳,但是這里還要注意下復(fù)位管腳,要給它接一個高電平,否則無法工作。
程序移植完成,保存、清理、編譯、下載一條龍,然后重新上電,效果如下所示:
程序里使用了一個軟件定時器,每隔3秒刷新一下圖片。
-
OLED
+關(guān)注
關(guān)注
119文章
6253瀏覽量
226580 -
SPI
+關(guān)注
關(guān)注
17文章
1749瀏覽量
94172 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4365瀏覽量
63872
原文標(biāo)題:ESP8266_09基于IIC控制的OLED屏幕
文章出處:【微信號:gh_dae0718828df,微信公眾號:gh_dae0718828df】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
把esp8266加入到c51單片機(jī)單通道程序怎么寫
ESP8266 通過 MQTT 協(xié)議實現(xiàn) LED 的遠(yuǎn)程控制

esp32和esp8266代碼共用嗎
esp8266和esp32區(qū)別是什么
ESP8266需要燒錄固件庫嘛
esp8266不燒錄可以使用嗎
esp8266wifi模塊怎么連接手機(jī)
Arduino Nano 和 NodeMCU ESP8266 讀取 DHT11 環(huán)境溫濕度數(shù)據(jù)及 OLED顯示

ESP8266-01如何更新固件?
ESP8266如何實現(xiàn)進(jìn)入Light Sleep mode時關(guān)掉屏幕顯示?
國產(chǎn)低成本W(wǎng)i-Fi SoC解決方案芯片ESP8266與ESP8285對比差異

使用Wi-Fi ESP8266方案模組接入云平臺

評論