天天看點

HaaS EDU場景式應用學習 - 溫濕度計實驗介紹涉及知識點開發環境準備軟硬體環境準備硬體設計開發者支援

實驗介紹

本章主要介紹溫濕度計的實作,本産品闆載了溫濕度傳感器SI7006。該傳感器不但能測量溫度,還能測量相對濕度。本章我們将向大家介紹如何使用haas1000來讀取SI7006數字溫濕度傳感器,進而得到環境溫度和相對濕度等資訊,并把從溫濕度值顯示在OLED子產品上。

開始學習之前我們先看一下顯示效果,如下圖所示:

HaaS EDU場景式應用學習 - 溫濕度計實驗介紹涉及知識點開發環境準備軟硬體環境準備硬體設計開發者支援

涉及知識點

  • I2C通信原理
  • SI7006光照與接近傳感器原理
  • OLED繪圖

開發環境準備

硬體

開發用電腦一台

HAAS EDU K1 開發闆一塊

USB2TypeC 資料線一根

>

  • 1
  • 2
  • 3

軟體

AliOS Things開發環境搭建

開發環境的搭建請參考 @ref HaaS_EDU_K1_Quick_Start (搭建開發環境章節),其中詳細的介紹了AliOS Things 3.3的IDE內建開發環境的搭建流程。

HaaS EDU K1 DEMO 代碼下載下傳

HaaS EDU K1 DEMO 的代碼下載下傳請參考 @ref HaaS_EDU_K1_Quick_Start (建立工程章節),其中,

選擇解決方案: 基于教育開發闆的示例

選擇開發闆: haaseduk1 board configure

代碼編譯、燒錄

參考 @ref HaaS_EDU_K1_Quick_Start (3.1 編譯工程章節),點選 ✅ 即可完成編譯固件。

參考 @ref HaaS_EDU_K1_Quick_Start (3.2 燒錄鏡像章節),點選 "⚡️" 即可完成燒錄固件。

IIC總線是一種最早由PHILIPS公司開發的兩線式串行總線,用于連接配接微控制器及其外圍裝置。它是由資料線SDA和時鐘SCL構成的串行總線,可發送和接收資料。在CPU與被控IC之間、IC與IC之間進行雙向傳送,高速IIC總線一般可達400kbps以上。

I2C總線在傳送資料過程中共有三種類型信号, 它們分别是:開始信号、結束信号和應答信号。

開始信号:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送資料。

結束信号:SCL為高電平時,SDA由低電平向高電平跳變,結束傳送資料。

應答信号:接收資料的IC在接收到8bit資料後,向發送資料的IC發出特定的低電平脈沖,表示已收到資料。CPU向受控單元發出一個信号後,等待受控單元發出一個應答信号,CPU接收到應答信号後,根據實際情況作出是否繼續傳遞信号的判斷。若未收到應答信号,由判斷為受控單元出現故障。

波形如下圖:

HaaS EDU場景式應用學習 - 溫濕度計實驗介紹涉及知識點開發環境準備軟硬體環境準備硬體設計開發者支援

SI7006傳感器簡介

SI7006 是Silicon Lab公司推出的一款相對濕度及溫度傳感器,其結合了工廠校準濕度和溫度傳感器元件、模拟-數字轉換器,信号處理和一個I2C主機接口。使用業界标準低K電媒體聚合物提供了出色的精度和長期穩定性,同時具有低漂移和低滞後。同時其創新的CMOS設計還使其具備很低的功耗。

特征:

  • 相對濕度傳感器:
  • ±5%RH(最大)@ 0-80%RH的
  • 溫度傳感器:
  • ±1.0℃的精确度(最大)@ -10至+ 85°C
  • 0至100%RH的工作範圍内
  • 可達-40至+125°C的工作範圍
  • 工作電壓範圍寬(1.9〜3.6V)
  • 低功耗:2.2μW平均功率為3.3V和每秒1個樣本
  • I2C主機接口
  • 片上內建加熱器
  • 采用3mm x 3mm QFN封裝
  • 卓越的長期穩定性
  • 支援工廠校準
  • 在回流和運作壽命的保護
  • 防止污染的灰塵,污垢,日用化工和其它液體

應用:

  • 資産和貨物跟蹤
  • 汽車氣候控制和去霧
  • 嬰兒螢幕
  • 持續氣道正壓通氣(CPAP)機
  • 洪水和水檢測
  • 瓦斯,火災和煙霧探測器
  • 手機/智能手機
  • 工業HVAC / R
  • 筆記本電腦/平闆電腦
  • 雷射列印機
  • 微環境/資料中心
  • PLC和IO子產品
  • 遠端遙測裝置
  • 平闆電腦
  • 測試和測量
  • 恒溫/恒濕
  • 通風和空調系統
  • 氣象站
  • 風力發電逆變器
  • 擋風玻璃和後視鏡系統
  • 無線基站
  • 無線傳感器網絡

參考上一章節

軟硬體環境準備

1、開發用電腦一台

2、HaaS EDU K1開發闆一個 (開發闆内置SI7006傳感器)

3、USB Type-C 資料線一根

硬體設計

在本實驗中,SI7006貼片在主機闆上,中間I2C與MCU通信,原理圖如下所示:

HaaS EDU場景式應用學習 - 溫濕度計實驗介紹涉及知識點開發環境準備軟硬體環境準備硬體設計開發者支援

EDU SI7006部分原理圖

軟體設計

應用代碼部分

檔案路徑如下:

solutions/eduk1_demo/k1_apps/humiture/humiture.c

solutions/eduk1_demo/k1_apps/humiture/humiture.h

si7006_getTempHumidity(&hump, &temp);

sprintf(temp_str, "T:%5.1fC", temp);

sprintf(hump_str, "H:%5.1f%%", hump);

OLED_Icon_Draw(14, 4, &icon_thermometer_24_24, 0);

OLED_Icon_Draw(14, 36, &icon_hygrometer_24_24, 0);

OLED_Icon_Draw(2, 24, &icon_skip_left, 0);

OLED_Icon_Draw(122, 24, &icon_skip_right, 0);

OLED_Show_String(42, 8, temp_str, 16, 1);

OLED_Show_String(42, 40, hump_str, 16, 1);

OLED_Refresh_GRAM();

aos_msleep(500);

  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

驅動部分

components/peripherals/sensor/drv/drv_temp_humi_si_si7006.c

驅動代碼整體主要分為三部分:

  • 擷取産品ID
  • 擷取溫度值
  • 擷取濕度值

void si7006_getID(uint8_t *id_buf)

{

uint8_t reg[4] = {Si7006_READ_ID_LOW_0,Si7006_READ_ID_LOW_1,Si7006_READ_ID_HIGH_0,Si7006_READ_ID_HIGH_1};

hal_i2c_master_send(&i2c_dev, i2c_dev.config.dev_addr, reg, 2, 1000);

aos_msleep(30);

hal_i2c_master_recv(&i2c_dev, i2c_dev.config.dev_addr, id_buf, 4, 1000);

hal_i2c_master_send(&i2c_dev, i2c_dev.config.dev_addr, &reg[2], 2, 1000);

hal_i2c_master_recv(&i2c_dev, i2c_dev.config.dev_addr, &id_buf[4], 4, 1000);

return;

}

bool si7006_getTemperature(float *temperature)

uint8_t reg = Si7006_MEAS_TEMP_NO_MASTER_MODE;

uint8_t read_data[2] = {0};

unsigned int value;

hal_i2c_master_send(&i2c_dev, i2c_dev.config.dev_addr, &reg, 1, 1000);

hal_i2c_master_recv(&i2c_dev, i2c_dev.config.dev_addr, read_data, 2, 1000);

value = (read_data[0] << 8) | read_data[1];

LOGI("APP", "%0x -- %0x -->0x%x\n", read_data[0],read_data[1],value);

// A temperature measurement will always return XXXXXX00 in the LSB field.

if (value & 0xFFFC)

{

*temperature = (175.72f * (float)value) / 65536.0f - 46.85f;

LOGI("APP", "temperature: %2f \n", *temperature);

}

else

LOGI("APP", "Error on temp\n");

return 1;

return 0;

/*

i2c – the i2c device

dev_addr – device address

mem_addr – mem address

mem_addr_size – mem address

data – i2c master send data

size – i2c master send data size

*/

bool si7006_getHumidity(float *humidity)

uint8_t reg = Si7006_MEAS_REL_HUMIDITY_NO_MASTER_MODE;

uint8_t read_data[3] = {0};

if (value & 0xFFFE)

*humidity = ((125.0f * (float)value ) / 65535.0f) - 6.0f;

LOGI("APP", "humidity: %f \n", *humidity);

LOGI("APP", "Error on humidity\n");

//get temp and humidity

void si7006_getTempHumidity(float *humidity, float *temperature)

si7006_getTemperature(temperature);

si7006_getHumidity(humidity);

  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80

開發者支援

HaaS官方:

https://haas.iot.aliyun.com/

HaaS技術社群:

https://blog.csdn.net/HaaSTech

開發者釘釘群和公衆号見下圖,開發者釘釘群每天都有技術支援同學值班。

HaaS EDU場景式應用學習 - 溫濕度計實驗介紹涉及知識點開發環境準備軟硬體環境準備硬體設計開發者支援
<link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-d7a94ec6ab.css" rel="stylesheet">
            <link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-49037e4d27.css" rel="stylesheet">
    </div>