菜鳥入門9,在I2C通訊協議的基礎上完成的溫溼度採集
前言
這次本菜鳥要帶領大家一起學習一個晶片和一個模組,AHT20溫溼度感測器晶片和stm32指南者的I2C通訊模組,那就話不多說,現在開始吧
提示:以下是本篇文章正文內容,下面案例可供參考
一、介紹
AHT20介紹
首先讓我們看看ATH20長什麼樣
2020年上市,奧鬆生產;
3mmx3mmx1mm 超小體積;
經過標定的數字訊號,標準I2C輸出格式;
由一個電容式溼度感測元件和一個標準的片上溫度感測元件組成;
採用SMD封裝適於迴流焊;
響應迅速、抗干擾能力強;
AHT20 的供電範圍為 2.0-5.5V, 推薦電壓為3.3V。
應用場景
它廣泛應用於暖通空調 、除溼器、測試及檢測裝置、消費品、汽車 、自動控制、資料記錄器、氣象站、家電、溼度調節、醫療及其他相關溼度檢測控制等領域。
I2C協議簡介
I2C通訊協議(Inter-Integrated Circuit)是由Phiilps公司開發的一種簡單、雙向二線制同步序列匯流排。它只需要兩根線即可在連線於匯流排上的器件之間傳送資訊。由於它引腳少,硬體實現簡單,可擴充套件性強,不需要 USART、CAN 等通訊協議的外部收發裝置,現在被廣泛地使用在系統內多個積體電路(IC)間的通訊。
軟體I2C和硬體I2C的區別
硬體I2C對應晶片上的I2C外設,有相應I2C驅動電路,其所使用的I2C管腳也是專用的,因而效率要遠高於軟體模擬的I2C;一般也較為穩定,但是程式較為繁瑣。硬體(韌體)I2C是直接呼叫內部暫存器進行配置;而軟體I2C是沒有暫存器這個概念的。
軟體I2C一般是使用GPIO管腳,用軟體控制SCL,SDA線輸出高低電平,模擬i2c協議的時序。
主要對比:
1.硬體IIC用法比較複雜,模擬IIC的流程更清楚一些。
2.硬體IIC速度比模擬快,並且可以用DMA
3.模擬IIC可以在任何管腳上,而硬體只能在固定管腳上。
二、溫溼度採集
要求
每隔2秒鐘採集一次溫溼度資料
通過串列埠傳送到上位機(windows10)
程式碼部分
本來可以用之前的串列埠工程的模板,但是不知道為啥搞了好幾天都沒有成功,本菜鳥就換了一條路子
首先從奧鬆電子官網下載程式碼
再仔細閱讀AHT20的中午說明,根據上面給的資料修改程式碼
修改後的程式碼如下
main.c
#include "delay.h"
#include "temhum.h"
#include "sys.h"
#include "usart.h"
int main(void)
{
u32 CT_data[2]={0};
volatile float hum=0,tem=0;
delay_init(); //延時函式初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設定NVIC中斷分組2:2位搶佔優先順序,2位響應優先順序
uart_init(115200); //串列埠初始化為115200
temphum_init(); //ATH20初始化
while(1)
{
AHT20_Read_CTdata(CT_data); //不經過CRC校驗,直接讀取AHT20的溫度和溼度資料
hum = CT_data[0]*100*10/1024/1024; //計算得到溼度值(放大了10倍)
tem = CT_data[1]*200*10/1024/1024-500;//計算得到溫度值(放大了10倍)
printf("此刻溼度:%.1f%%\r\n",(hum/10));
printf("此刻溫度:%.1f度\r\n",(tem/10));
printf("\r\n");
}
myiic.c
#include "myiic.h"
#include "delay.h"
void IIC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7);
}
void IIC_Start(void)
{
SDA_OUT();
IIC_SDA=1;
IIC_SCL=1;
delay_us(4);
IIC_SDA=0;
delay_us(4);
IIC_SCL=0;
}
//²úÉúIICÍ£Ö¹ÐźÅ
void IIC_Stop(void)
{
SDA_OUT();
IIC_SCL=0;
IIC_SDA=0;
delay_us(4);
IIC_SCL=1;
IIC_SDA=1;
delay_us(4);
}
u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_IN();
IIC_SDA=1;delay_us(1);
IIC_SCL=1;delay_us(1);
while(READ_SDA)
{
ucErrTime++;
if(ucErrTime>250)
{
IIC_Stop();
return 0;
}
}
IIC_SCL=0;
return 1;
}
void IIC_Ack(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=0;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
//²»²úÉúACKÓ¦´ð
void IIC_NAck(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=1;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
void IIC_Send_Byte(u8 txd)
{
u8 t;
SDA_OUT();
IIC_SCL=0;
for(t=0;t<8;t++)
{
IIC_SDA=(txd&0x80)>>7;
txd<<=1;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
delay_us(2);
}
}
u8 IIC_Read_Byte(unsigned char ack)
{
unsigned char i,receive=0;
SDA_IN();
for(i=0;i<8;i++ )
{
IIC_SCL=0;
delay_us(2);
IIC_SCL=1;
receive<<=1;
if(READ_SDA)receive++;
delay_us(1);
}
if (!ack)
IIC_NAck();
else
IIC_Ack();
return receive;
}
編譯過程不再贅述,生成hex檔案後
連線焊接好的aht20和指南者,接法如下
連線指南者與上位機
將生成的hex檔案用mcuisp燒錄進板子中,開啟串列埠除錯程式
顯示如下:
此時再用手捂住晶片,重新觀察
溫度溼度都發生變化
總結
以上就是今天學習的I2C通訊模組和AHT20溫溼度感測器晶片的全部內容,這次的學習使我對於I2C通訊協議的原理有了更加深入的理解。
相關文章
- STM32基於I2C協議的AHT20溫溼度測量協議
- 網路通訊協議基礎(ISIS)——入門協議
- STM32之IIC通訊-SHT30溫溼度採集
- 13. I2C通訊協議協議
- java菜鳥入門Java
- 菜鳥的Hadoop快速入門Hadoop
- 新手入門AMF協議基礎全解協議
- 如何debug通訊協議 I2C 子系統協議
- 5.7.2 ARM微控制器外設:I2C的通訊協議協議
- Linux“菜鳥”到“菜鳥的一些建議Linux
- ENSP上各種基礎協議的配置協議
- React菜鳥入門之setStateReact
- ESlint-菜鳥入門EsLint
- MySQL索引基礎--菜鳥篇MySql索引
- 從入門到菜鳥的經驗分享
- 菜鳥請教rbac的基礎知識
- Linux菜鳥到老鳥的那些建議Linux
- HTTP協議的通訊框架HTTP協議框架
- WLAN常用的通訊協議協議
- 通訊協議協議
- 神經網路的菜鳥入門祕籍神經網路
- c#入門教程(菜鳥級)C#
- MFC入門——菜鳥級筆記筆記
- python基礎教程|菜鳥教程Python
- MQTT物聯網通訊協議入門及Demo實現MQQT協議
- I2C協議協議
- Redis 通訊協議Redis協議
- HTTP通訊協議HTTP協議
- Mysql通訊協議MySql協議
- MQ通訊協議MQ協議
- web通訊協議Web協議
- IPC Kit基礎入門:理解HarmonyOS的程序間通訊架構架構
- 網路基礎與協議入門——(2)TCP協議重點協議TCP
- 網路基礎與協議入門——(1)HTTP協議重點協議HTTP
- 基於C#的通訊協議封包(附程式碼)C#協議
- Golang快速入門:從菜鳥變大佬Golang
- Django 1.4 Python 2.7菜鳥入門DjangoPython
- C++語言菜鳥快速入門C++