Цена:
GY-39 - недорогой модуль, сочетающий в себе датчик атмосферного давления, температуры, влажности и интенсивности света, построенный на базе датчиков BME280 и MAX44009. На плате установлен микроконтроллер, который собирает и обрабатывает данные с датчиков и осуществляет коммуникацию по интерфейсам I2C и UART. Разнообразие интерфейсов позволяет подключить модуль как к микроконтроллеру, так и к ПК через преобразователь USB-UART.
Параметры:
Назначение выводов:
При помощи вывода S0 можно выбрать интерфейс связи с установленным на плате микроконтроллером. Изначально выбран интерфейс UART. Чтобы подключиться к микроконтроллеру по интерфейсу I2C необходимо вывод S0 соединить с выводом GND. Для это вывод GND выведен рядом с S0.
Чтобы получить доступ по интерфейсу I2C непосредственно с датчиками BME280 и MAX44009, необходимо вывод S1 соединить с GND.
Встроенный в модуль микроконтроллер использует собственный протокол связи, который подробно описан в DataSheet.
Пример подключения модуля по интерфейсу UART в среде ArduinoIDE. Используются только стандартные библиотеки.
/////////////////////
/*
GY39----MINI
VCC----VCC
GND----GND
1:RX---TX,send A5 02 A7 to GY-39
2:TX---RX
3:MINI_TX---FT232_RX
*/
//////////////////
unsigned char Re_buf[15],counter=0;
unsigned char sign=0;
typedef struct
{
uint32_t P;
uint16_t Temp;
uint16_t Hum;
uint16_t Alt;
} bme;
void setup() {
Serial.begin(9600);
delay(1);
Serial.write(0XA5);
Serial.write(0X02);
Serial.write(0XA7);
}
void loop() {
unsigned char i=0,sum=0;
uint16_t data_16[2]={0};
bme Bme;
if(sign)
{
for(i=0;i<14;i++)
sum+=Re_buf[i];
if(sum==Re_buf[i] )
{
Bme.Temp=(Re_buf[4]<<8)|Re_buf[5];
data_16[0]=(Re_buf[6]<<8)|Re_buf[7];
data_16[1]=(Re_buf[8]<<8)|Re_buf[9];
Bme.P=(((uint32_t)data_16[0])<<16)|data_16[1];
Bme.Hum=(Re_buf[10]<<8)|Re_buf[11];
Bme.Alt=(Re_buf[12]<<8)|Re_buf[13];
Serial.print("Temp: ");
Serial.print( (float)Bme.Temp/100);
Serial.print(" DegC PRESS : ");
Serial.print( ((float)Bme.P)/100);
Serial.print(" Pa HUM : ");
Serial.print( (float)Bme.Hum/100);
Serial.print(" % ALT:");
Serial.print( Bme.Alt);
Serial.println("m");
sign=0;
}
}
}
void serialEvent() {
while (Serial.available()) {
Re_buf[counter]=(unsigned char)Serial.read();
if(counter==0&&Re_buf[0]!=0x5A) return;
counter++;
if(counter==15)
{
counter=0;
sign=1;
}
}
}
Пример подключения модуля по интерфейсу I2C в среде ArduinoIDE. Используются только стандартные библиотеки.
#include <Wire.h>
/////////////////////////////////
/*
GY-39-----mini
VCC----VCC
SCL----A5
SDA----A4
GND--GND
*/
//////////////////////////////////
#define uint16_t unsigned int
#define iic_add 0x5b
typedef struct
{
uint32_t P;
uint16_t Temp;
uint16_t Hum;
uint16_t Alt;
} bme;
bme Bme;
uint32_t Lux;
void i2c_speed(uint16_t scl_speed)
{
/* initialize TWI clock: 40 kHz clock, TWPS = 0 => prescaler = 1 */
TWSR = 0; /* no prescaler */
TWBR = ((F_CPU/scl_speed)-16)/2; /* must be > 10 for stable operation */
}
void setup() {
Serial.begin(115200);
Wire.begin();
i2c_speed(40000);
delay(1);
}
void loop() {
get_bme();
Serial.print("Temp: ");
Serial.print( (float)Bme.Temp/100);
Serial.print(" DegC PRESS : ");
Serial.print( ((float)Bme.P)/100);
Serial.print(" Pa HUM : ");
Serial.print( (float)Bme.Hum/100);
Serial.print(" % ALT:");
Serial.print( Bme.Alt);
Serial.println("m");
get_lux();
Serial.print( "Lux: ");
Serial.print( ((float)Lux)/100);
Serial.println(" lux");
delay(200);
}
void get_bme(void)
{
uint16_t data_16[2]={0};
uint8_t data[10]={0};
iic_read(0x04,data,10);
Bme.Temp=(data[0]<<8)|data[1];
data_16[0]=(data[2]<<8)|data[3];
data_16[1]=(data[4]<<8)|data[5];
Bme.P=(((uint32_t)data_16[0])<<16)|data_16[1];
Bme.Hum=(data[6]<<8)|data[7];
Bme.Alt=(data[8]<<8)|data[9];
}
void get_lux(void)
{
uint16_t data_16[2]={0};
uint8_t data[10]={0};
iic_read(0x00,data,4);
data_16[0]=(data[0]<<8)|data[1];
data_16[1]=(data[2]<<8)|data[3];
Lux=(((uint32_t)data_16[0])<<16)|data_16[1];
}
void iic_read(unsigned char reg,unsigned char *data,uint8_t len )
{
Wire.beginTransmission(iic_add);
Wire.write(reg);
Wire.endTransmission(false);
delayMicroseconds(10);
if(len>4)
Wire.requestFrom(iic_add,10);
else
Wire.requestFrom(iic_add,4);
for (uint8_t i = 0; i < len; i++)
{
data[i] = Wire.read();
}
}
г. Москва, Пятницкое ш. д. 18, пав. 566
zakaz@compacttool.ru
8-495-752-55-22
Информация представленная на данном информационном ресурсе преследует исключительно рекламные цели и не является договором-офертой !
© Все права защищены 2015 - 2024г https://compacttool.ru