簡介
ESP32是國產樂鑫公司生產的32位單片機,雙核240MHz,帶有藍牙和wifi功能,本例中使用的是ESP32-S模組。TMP117是德州儀器(TI)推出的I2C溫度傳感器系列,本例中使用的具體型號是TMP117MAIDRVR。本例中使用的開發環境是VSCODE安裝ESP-IDF插件。
硬件連接
TMP117的引腳定義
引腳定義
這里需要注意的是芯片根據ADD0引腳連接不同的網絡,I2C地址會發生變化,具體的定義如下圖
I2C地址
表中的X代表I2C通訊中代表讀寫的bit,需要注意的是,在ESP的I2C庫函數中,傳入參數的地址是7位的地址,在函數中會右移一位并在最低位加上代表讀寫的bit組成8位的讀地址或寫地址。舉例來說,假如ADD0連接Ground,按照表中的地址是1001000X,那么要傳入I2C函數中傳入的地址應該為01001000也就是0x48。
TI的數據手冊上給出的典型應用電路
典型應用電路
這里需要注意的是在使用ESP32作為主機的時候,由于ESP32的芯片手冊上提醒了ESP32的數字IO口自帶上拉電阻,所以應用電路圖中的5Kohm上拉電阻要去掉直接連接到ESP32的IO口。
本人搭建的ESP32-S電路
ESP32-S
本人搭建的TMP117外圍電路
TMP117外圍電路
這里為了方便我將ADD0接到了3.3V,按照前面的表格地址變成了0x49,具體按照自己的要求來接。
使用方法
首先配置ESP-IDF的配置文件,將I2C使用的SDA和SCL引腳配置為和電路中一樣(按照自己的電路連接配置)。在VSCODE主界面按F1,在彈出的搜索框內選擇ESP-IDF SDK配置編輯器。在左邊選擇Example Configuration,在右邊的SCL GPIO Num和SDA GPIO Num中輸入自己的硬件連接的IO口,點擊右上角的保存。
VSCODE配置
上電后TMP117默認進入連續轉換模式,每經過一次轉換時間更新一次溫度寄存器的值,讀取溫度寄存器(地址0x00)即可獲取當前溫度值。精度為0.0078125攝氏度每LSB,也就是讀取到的原始數據作為16位有符號數乘上0.0078125就得到當前攝氏溫度值。
#include return i2c_master_write_read_device(I2C_MASTER_NUM, TMP117_ADDR, ®_addr, 1, data, len, I2C_MASTER_TIMEOUT_MS / portTICK_RATE_MS);}/** * @brief i2c master initialization */ static esp_err_t i2c_master_init(void) { int i2c_master_port = I2C_MASTER_NUM; i2c_config_t conf = { .mode = I2C_MODE_MASTER, .sda_io_num = I2C_MASTER_SDA_IO, .scl_io_num = I2C_MASTER_SCL_IO, .sda_pullup_en = GPIO_PULLUP_ENABLE, .scl_pullup_en = GPIO_PULLUP_ENABLE, .master.clk_speed = I2C_MASTER_FREQ_HZ, }; i2c_param_config(i2c_master_port, &conf); return i2c_driver_install(i2c_master_port, conf.mode, I2C_MASTER_RX_BUF_DISABLE, I2C_MASTER_TX_BUF_DISABLE, 0); }float MY_OutputtoTemp(int16_t out){ return ((float) out * TMP117_RESOLUTION); }void app_main(void){ uint8_t data[2]; int16_t iTemp; float ftemp; ESP_ERROR_CHECK(i2c_master_init()); ESP_LOGI(TAG, 'I2C initialized successfully'); vTaskDelay(15 / portTICK_PERIOD_MS); while(1) { ESP_ERROR_CHECK(M117B_register_read(TMP117_TMP_RIG_ADDR , data, 2)); vTaskDelay(15 / portTICK_PERIOD_MS); iTemp=(int16_t)((data[0] << 8) | data[1]); ftemp=MY_OutputtoTemp((int16_t)iTemp); ESP_LOGI(TAG, 'M117 Temp: %.3f n',ftemp); vTaskDelay(975 / portTICK_PERIOD_MS); }}
上一篇:(3)ESP32 Python 制作一個辦公室溫度計
下一篇:最后一頁
推薦閱讀最新更新時間:2025-06-09 10:37




設計資源 培訓 開發板 精華推薦
- LT1172HVCT、5V/1.25A 正降壓轉換器的典型應用
- 【訓練營】四條腿機器狗
- SG3525A 推挽式脈寬調制器控制電路的典型應用
- LT1108CS8-12掌上電腦邏輯電源微功率DC/DC轉換器典型應用電路
- AM2M-1515DH30-NZ ±15 Vout、2W 雙路輸出 DC-DC 轉換器的典型應用
- LTC2945HMS 具有高達 200V 浪涌保護的堅固型 4V 至 70V 高壓側功率監視器的典型應用
- 常用MCU全能燒錄器
- 【航順訓練營】國產航順MCU開發學習板
- LTC3624EMSE-25 5V 輸出電壓、2A 同步降壓型穩壓器的典型應用,具有 1MHz、突發模式操作
- 具有備用電源監控功能的 LTC4420IMSE 18V 雙輸入微電源路徑優先器的典型應用電路