Serg2see
New member
Здравствуйте!
Имеется ESP-07. К нему подключаю BME280, MAX44009, SSD1306, BS18B20, датчик движения и кнопка.
Соответственно по I2C подключаю BME280, MAX44009 и SSD1306.
Идея достаточно простая - все измеряемые параметры должны передаваться по WiFi на сервер, планируется, что это будет малина с экранчиком и контроллеров, подключаемых к малине будет несколько. Но до этого ещё пока далеко.
Реализацию делаю по шагам: подключил BME280 и BS18B20, затем SSD1306, на который вывожу две температуры. На каждый датчик делаю отдельный файл lua. Работает, в ESPlorer выводятся две температуры, давление и влажность. Далее подключил MAX44009 и тут запутался, не хватает знаний, я только начинаю осваивать тему с esp.
Какие-то показания идут в ESPlorer, но некорректные. Собственно запутался в написании скетча Display_Init.lua.
Прошу не пинать строго, подскажите, как сделать правильно.
Код main.lua (здесь всё работает):
А вот код Display_Init.lua, который дописать корректно не получается:
По этому коду выводятся цифры (luminance =) "92, 255", если немного затемнить датчик MAX44009, то цифра 92 уменьшается.
На "языке Arduino" это бы выглядело так (да простит меня первоисточник, но откуда взял уже не помню):
Но у меня на Lua всё должно быть.
Прошу помочь, знаний не хватает, учусь.
Для подробностей прилагаю даташит на MAX44009 и схему подключения.
Сергей
Имеется ESP-07. К нему подключаю BME280, MAX44009, SSD1306, BS18B20, датчик движения и кнопка.
Соответственно по I2C подключаю BME280, MAX44009 и SSD1306.
Идея достаточно простая - все измеряемые параметры должны передаваться по WiFi на сервер, планируется, что это будет малина с экранчиком и контроллеров, подключаемых к малине будет несколько. Но до этого ещё пока далеко.
Реализацию делаю по шагам: подключил BME280 и BS18B20, затем SSD1306, на который вывожу две температуры. На каждый датчик делаю отдельный файл lua. Работает, в ESPlorer выводятся две температуры, давление и влажность. Далее подключил MAX44009 и тут запутался, не хватает знаний, я только начинаю осваивать тему с esp.
Какие-то показания идут в ESPlorer, но некорректные. Собственно запутался в написании скетча Display_Init.lua.
Прошу не пинать строго, подскажите, как сделать правильно.
Код main.lua (здесь всё работает):
Код:
print("Start main.lua")
-- Init Wifi
dofile ("WIFIdata.lua")
-- Global Variables
g_data = {P=0, Ti=0, To=0, H=0}
-- IIC init
sda = 2
scl = 1
--local sla = 0x3c
i2c.setup(0, sda, scl, i2c.SLOW)
-- MAX44009 Init
i2c.write(0,0x02, 0x40)
-- BME280 init
dofile("BME280_Init.lua")
dofile("BME280_Read.lua")
-- Init Display SSD1306 128x32
-- font_10x20r,font_8x13r,font_9x15r,font_chikita
--if cfg.display==1 then
dofile('Display_Init.lua')
dofile('Display_Show.lua')
--end
-- Start timer
tmr.register(1, 5000, tmr.ALARM_AUTO, function()
dofile("DS18B20_Read.lua")
dofile("BME280_Read.lua")
dofile("Light_Read.lua")
print (" to = "..g_data.To.." ti = "..g_data.Ti.." P = "..g_data.P.." H = "..g_data.H.." %") -- TEST
print(adc.read(0)) -- TEST
print(luminance) -- TEST
--if cfg.display==1 then
dofile('Display_Show.lua')
--end
end)
tmr.start(1)
--Start HTTP 'server'
dofile ("Server.lua")
Код:
local lux_addr = 0x4A
local id = 0
-- initialize i2c, set pin1 as sda, set pin2 as scl
-- i2c.setup(id, sda, scl, i2c.SLOW)
--i2c.start(id)
--i2c.address(id, lux_addr ,i2c.TRANSMITTER)
--i2c.write(id,0x02, 0x40)
--i2c.stop(id)
--tmr.delay(500000)
-- defined function: read from reg_addr content of dev_addr
function read_reg(dev_addr, reg_addr)
local c = {a=0, b=0}
i2c.start(0)
i2c.address(0, dev_addr, i2c.TRANSMITTER)
i2c.write(0, reg_addr)
i2c.stop(0)
i2c.start(0)
i2c.address(0, dev_addr, i2c.RECEIVER)
c.a = i2c.read(0, 1)
i2c.start(0)
c.b = i2c.read(0, 1)
i2c.stop(0)
return c
end
-- get content of register 0x03 of device lux_addr
local reg = read_reg(lux_addr, 0x03)
--print(string.byte(reg))
--luminance = string.byte(reg)
--luminance = reg.a
--Convert the data to lux
luminance = string.byte(reg.a) .. ", " .. string.byte(reg.b)
На "языке Arduino" это бы выглядело так (да простит меня первоисточник, но откуда взял уже не помню):
Код:
#include<Wire.h>
// MAX44009 I2C address is 0x4A(74)
#define Addr 0x4A
void setup()
{
// Initialise I2C communication as MASTER
Wire.begin();
// Initialise serial communication, set baud rate = 9600
Serial.begin(9600);
// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select configuration register
Wire.write(0x02);
// Continuous mode, Integration time = 800 ms
Wire.write(0x40);
// Stop I2C transmission
Wire.endTransmission();
delay(300);
}
void loop()
{
unsigned int data[2];
// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select data register
Wire.write(0x03);
// Stop I2C transmission
Wire.endTransmission();
// Request 2 bytes of data
Wire.requestFrom(Addr, 2);
// Read 2 bytes of data
// luminance msb, luminance lsb
if (Wire.available() == 2)
{
data[0] = Wire.read();
data[1] = Wire.read();
}
// Convert the data to lux
int exponent = (data[0] & 0xF0) >> 4;
int mantissa = ((data[0] & 0x0F) << 4) | (data[1] & 0x0F);
float luminance = pow(2, exponent) * mantissa * 0.045;
// Output data to serial monitor
Serial.print("Ambient Light luminance :");
Serial.print(luminance);
Serial.println(" lux");
delay(300);
}
Прошу помочь, знаний не хватает, учусь.
Для подробностей прилагаю даташит на MAX44009 и схему подключения.
Сергей
Вложения
-
1,013.6 KB Просмотры: 9
-
82.6 KB Просмотры: 11