NodeMCU рд╕рд░рд▓ рдЪрд╛рд▓рдХ рдореЙрдбрд▓ (рдПрд╕рдбреАрдПрдо) рд╢реЛрдХреЗрд╕: рдЧрддрд┐рд╢реАрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕

рдЫрд╡рд┐


NodeMCU рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдлрд░реНрдорд╡реЗрдпрд░ рд╣реИ , рдЬреЛ ESP8266 рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ ( ESP32 рд╕рдорд░реНрдерди рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╣реИ) рдкрд░ Lua рджреБрднрд╛рд╖рд┐рдпрд╛ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рднреА рдирд┐рдпрдорд┐рдд рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде, рдЗрд╕рдореЗрдВ рд╡рд╛рдИрдлрд╛рдИ рдореЙрдбреНрдпреВрд▓ рдФрд░ SPIFFS рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╣реИред


рдпрд╣ рдЖрд▓реЗрдЦ NodeMCU - sdm рдХреЗ рд▓рд┐рдП рдирдП рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдПрд╕рдбреАрдПрдо рд╕рд░рд▓ рдЪрд╛рд▓рдХ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЦрдбрд╝рд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдбрд┐рд╡рд╛рдЗрд╕-рдбреНрд░рд╛рдЗрд╡рд░ рдореЙрдбрд▓ рдЕрдореВрд░реНрддрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рд╕реНрд╡рдпрдВ рдореЙрдбрд▓ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ рдФрд░ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдХреБрдЫ рдХрдореЗрдВрдЯрд░реА рдХреЗ рд╕рд╛рде sdm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд┐рдд рд╡реЗрдм рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣реЛрдЧрд╛ред


рдЪрд╛рд▓рдХ рдореЙрдбрд▓ рдореВрд▓ рдмрд╛рддреЗрдВ


рдореЙрдбрд▓ рдХреЗ рджреЛ рдкреНрд░рдореБрдЦ рдШрдЯрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рдбреНрд░рд╛рдЗрд╡рд░ рд╣реИрдВ ред рдбрд┐рд╡рд╛рдЗрд╕ рдХреБрдЫ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдпрд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдПрдХ рд╕рд╛рд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИред рдпрд╣ рдкреЗрдбрд╝реЛрдВ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╢реАрд░реНрд╖ рдкрд░ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде, рдмреАрдЪ рдореЗрдВ рдмрд╕реЗрдВ рдФрд░ рдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдВрд╕рд░ред


DEVICES + DRIVERS | +-----+ | +-----+ |1WIRE<----------------------+1WIRE| ++-+-++ | +-----+ | | | | +---------+ | +--------+ | +------+ | | | +------+DS1820| +---v----+ +---v----+ +---v----+ | | +------+ |DS1820|0| |DS1820|1| |DS1822|0| | | +---^----+ +---^----+ +---^----+ | | +------+ | | +--------------+DS1822| | | | | +------+ +-----------+------------------+ + 

рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рджрд┐рдП рдЧрдП рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рддрд░реНрдХ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИред рдЪрд╛рд▓рдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡рд┐рдзрд┐рдпрд╛рдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЪрд╛рд▓рдХ рд╕реЗ рдЬреБрдбрд╝реЗ рдбреЗрдЯрд╛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпрд╛рдБ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдЕрдВрджрд░ рд░рд╣рддреА рд╣реИрдВред


рдЧреБрдг рдЙрдирдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рджреЛ рдХрд╛рд░реНрдп рд╣реИрдВ: рдЧреЗрдЯрдЯрд░ рдФрд░ рд╕реЗрдЯрд░ рд╣реБрдХред рддреЛ рд╕реБрдкрд░рд╕реЗрдЯ рд╡рд┐рдзрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЧреБрдг рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рднреА рд▓реЗрддреЗ рд╣реИрдВ (рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдореЛрд░реА рджреБрд░реНрд▓рдн рд╣реИ, рдпрд╛рдж рд░рдЦреЗрдВ?)ред


 sdm.attr_add(drv, -- device handle "ref", -- attribute name "Reference voltage", -- attribute description 5, function(dev) -- this is a getter function return sdm.attr_data(sdm.attr_handle(dev, "ref")) end, function(dev, value) -- this is a setter function sdm.attr_set(sdm.attr_handle(dev, "ref"), value) end ) 

рдбрд┐рд╡рд╛рдЗрд╕ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ


рдбреНрд░рд╛рдЗрд╡рд░ рдореЙрдбрд▓ рдХрд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣рд┐рд╕реНрд╕рд╛ рдбрд┐рд╡рд╛рдЗрд╕-рдбреНрд░рд╛рдЗрд╡рд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрд▓рдмреНрдз рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд╕рд╛рде рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдорд┐рд▓рд╛рди рддрдм рддрдХ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рд╡рд╣ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред рдХреЗрд╡рд▓ рджреЛ рднрд╛рдЧ рдЧрд╛рдпрдм рд╣реИрдВ - рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдФрд░ рдХреБрдЫ рдбреЗрдЯрд╛ред


_poll() рдорд┐рд▓рд╛рди рддрд░реНрдХ рдореЗрдВ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдореЗрдВ _poll() рдирд╛рдо рд╕реЗ _poll() ред рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рд╣реИрдВрдбрд▓ рдХреЗ рд╕рд╛рде рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ true рдпрд╛ false рдЕрдЧрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреНрд░рдорд╢рдГ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рдВрд▓рдЧреНрди рдпрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


 sdm.method_add(drv, "_poll", nil, function(dev, drv, par) local attr = sdm.attr_data(sdm.local_attr_handle(dev, "id")) -- get device attribute "id" if attr == nil then return false end -- if it does not have one, driver does not match -- parent name must be "ESP8266_1W" and first byte of "id" must be "0x28" return (sdm.device_name(par) == "ESP8266_1W") and (attr:byte(1) == 0x28) end ) 

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдбреНрд░рд╛рдЗрд╡рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдХреЗрд╡рд▓ рдЪрд╛рд▓рдХ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рддреА рд╣реИрдВред рдЖрдо рддреМрд░ рдкрд░ рдпрд╣ рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпреЗ рдЪрд┐рдк рдЖрдИрдбреА, рдкреНрд░рдпреБрдХреНрдд рдкрд┐рди рдЖрджрд┐ рд╣реИрдВред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ sdm - рд╕реНрдерд╛рдиреАрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реЛрддреА рд╣реИред


рдбреНрд░рд╛рдЗрд╡рд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдмрд╛рдд рдХрд╣рдирд╛ рдмрд╛рдХреА рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рдж рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдФрд░ рдХреНрд▓реАрдирдЕрдк рдкрд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдкреНрд░рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП _init() рдФрд░ _free() рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдбреНрд░рд╛рдЗрд╡рд░ рдореЗрдВ _init() рд╡рд┐рдзрд┐ рд╣реИ рддреЛ рдЗрд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред _free() ред


 sdm.method_add(drv, "_init", nil, function(dev, drv, par) sdm.device_rename(dev, sdm.request_name("DS18B20")) -- rename device sdm.attr_copy(dev, "temp") -- copy attribute sdm.attr_copy(dev, "precision") -- copy attribute local met = sdm.method_dev_handle(par, "setup") -- get 1Wire bus pin init function .. local func = sdm.method_func(met) -- .. and .. func(par, dev) -- .. call it end ) sdm.method_add(drv, "_free", nil, function(dev, drv, par) local met = sdm.method_dev_handle(par, "free") -- get 1Wire bus pin free function .. local func = sdm.method_func(met) -- .. and .. func(par, dev) -- .. call it end ) 

рдЪреМрдХрд╕ рдкрд╛рдардХ рд╢рд╛рдпрдж рдкреВрдЫреЗрдВрдЧреЗ: рдХреНрдпрд╛ рдорддрд▓рдм рдКрдкрд░ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ "рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛" рд╣реИ? рдФрд░ рд╡рд╣ рд╕рд╣реА рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддреАрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрднреА рддрдХ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХреА рд╣реИ - рдирд┐рдЬреА рд╡рд┐рд╢реЗрд╖рддрд╛ ред рд╕рднреА рдбрд┐рд╡рд╛рдЗрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдмреАрдЪ рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдбреЗрдЯрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП sdm рдбреНрд░рд╛рдЗрд╡рд░ рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХрд╛ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рддрд╛ рд╣реИред


рдПрдХ рддреНрд╡рд░рд┐рдд рд╕рд╛рд░рд╛рдВрд╢:


  • рд╕реНрдерд╛рдиреАрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рджреНрд╡рд╛рд░рд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА, рдХрдиреЗрдХреНрдЯреЗрдб рдкрд┐рди рдЖрджрд┐ред
  • рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рд╕реЗ рдЬреБрдбрд╝реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдирд┐рдЬреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдбреНрд░рд╛рдЗрд╡рд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ рдЬреБрдбрд╝реЗ рдбреЗрдЯрд╛ рдХреЛ рд╣реЛрд▓реНрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХрд╛рд░ рд╕рдмрд╕реЗ рдЖрдо рд╣реИред

рд╕рдВрдкрддреНрддрд┐рд╕реНрдерд╛рдиреАрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдирд┐рдЬреА рд╡рд┐рд╢реЗрд╖рддрд╛рдбреНрд░рд╛рдЗрд╡рд░ (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ) рд╡рд┐рд╢реЗрд╖рддрд╛
рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рд╣реИрдпреБрдХреНрддрд┐рдпреБрдХреНрддрд┐рдбреНрд░рд╛рдЗрд╡рд░
рдбреНрд░рд╛рдЗрд╡рд░ рд╣реИрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп--+
рдбрд┐рд╡рд╛рдЗрд╕ рд╣реИрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп+++
рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛--+
рдЪрд╛рд▓рдХ рдХреЛ рдЕрд▓рдЧ рд░рдЦрдиреЗ рдкрд░ рджреГрдврд╝рддрд╛+-+

рд╡реЗрдм рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рд╕рд░реНрд╡рд░ рдХреЛрдб


рд╡рд╣рд╛рдБ рдПрдХ рд╕реБрдВрджрд░ nodemcu-httpserver рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ NudeMCU рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХреЛрдб рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдпрд╣ рдорд░ рдЪреБрдХрд╛ рд╣реИред рдпрд╣ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рд░реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ LFS рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ рдФрд░ рдлрд┐рд░ рд╣рд░ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред Vue.js рдЯреЗрдореНрдкрд▓реЗрдЯ рдЖрдзрд╛рд░рд┐рдд рд╡реЗрдм рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджрд░реНрд╢ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдлреНрд░рдВрдЯреЗрдВрдб рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ NodeMCU рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдЬреБрдбрд╝рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, vue.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдореМрдЬреВрдж рд░рд╣рдиреЗ рдФрд░ NodeMCU рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рдЪреВрдВрдХрд┐ рд╕рднреА рдЙрдкрдХрд░рдг рдкреЗрдбрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рддрд░рд╣ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: /ESP8266/ESP8266_1W/DS18S20-0 ред рдпрд╣рд╛рдБ /ESP8266 рдПрдХ NodeMCU рдкреЗрдЬ рд╣реИ, /ESP8266/ESP8266_1W рд╡рд╛рдпрд░ рдмрд╕ рдкреЗрдЬ рд╣реИ рдФрд░ рдЕрдВрдд рдореЗрдВ /ESP8266/ESP8266_1W/DS18S20-0 рддрд╛рдкрдорд╛рди рд╕реЗрдВрд╕рд░ рд╣реИред


рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рднреА рдбрд┐рд╡рд╛рдЗрд╕ рдкреГрд╖реНрда рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреЗрдЬ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд╣рд░ рдХреЙрд▓ рдкрд░ рдкрд░реЛрд╕рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреГрд╖реНрда рдХреЗ рдЕрдВрджрд░ JS рдХреЛрдб рдЙрд╕реА URL рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рдЬреЛ /api рд╕рд╛рде prepended рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЙрд▓ URL /api/ESP8266/ESP8266_1W/DS18S20-0 ред рдРрд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рд╕рд░реНрд╡рд░ JSON -encoded рдбрд┐рд╡рд╛рдЗрд╕-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкреЗрдЬ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, HTML рдкреЗрдЬ рдЕрдиреБрд░реЛрдз рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдХреЗрд╡рд▓ рдХрдЪреНрдЪреЗ рдбреЗрдЯрд╛ рдХреА рдЬрд░реВрд░рдд рд╣реИред


рдЙрдкрдХрд░рдг рдХрд╛ рдкреЗрдбрд╝


рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рд░рд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдЯреНрд░реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдбрд┐рд╡рд╛рдЗрд╕ рдЯреНрд░реА рдХреА рддрд░рд╣ рд╣реИ , рд▓реЗрдХрд┐рди рд╕рд░рд▓ рд╣реИред рдпрд╣ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╕реНрдерд╛рдиреАрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕рд╣рд┐рдд рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред


 local root={ -- local_attributes={}, children={ { name="ESP8266_1W", -- local_attributes={}, children = { { name="DS18S20-0", -- static declaration alternative to 1Wire poll method local_attributes={ { name="id", desc=nil, -- empty description to save space data=string.char(16) .. string.char(221) .. string.char(109) .. string.char(104) .. string.char(3) .. string.char(8) .. string.char(0) .. string.char(150) -- ugly way to create byte array }, { datapin=2 } } }, } }, { name="ESP8266_SPI", -- local_attributes={}, children = { { name="MCP3208-0" }, } }, } } 

рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕реЗрдЯрдЕрдк


рдпрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдкреНрд░рджрд░реНрд╢рдиред рдЗрд╕ рдкреНрд░рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рд╕реЗрдВрд╕рд░ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ NodeMCU рд╕реЗ рдЬреБрдбрд╝рд╛ рдерд╛:


  • DS18B20 рддрд╛рдкрдорд╛рди рд╕реЗрдВрд╕рд░
  • DS18S20 рддрд╛рдкрдорд╛рди рд╕реЗрдВрд╕рд░
  • MCP3208 ADC

1рд╡рд╛рдпрд░ рд╕реЗрдВрд╕рд░ рдПрдХ рд╣реА рдкрд┐рди рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред



рд╡реЗрдм рдкреЗрдЬ рдФрд░ рдбреНрд░рд╛рдЗрд╡рд░


рд░реВрдЯ рдбрд┐рд╡рд╛рдЗрд╕


рд░реВрдЯ рдбрд┐рд╡рд╛рдЗрд╕ (рдЙрд░реНрдл ESP8266) рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдЕрдкрдиреЗ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рддрд░реАрдХреЛрдВ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред


рдпрд╣ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдпрд╣рд╛рдВ рд╕реЗ рд╣реИ :


 sdm.method_add(drv, "_init", nil, function(dev, drv, par) local attr = sdm.attr_handle(dev, "id") -- get device "id" attribute sdm.attr_set(attr, node.chipid()) -- set "id" value attr = sdm.attr_handle(dev, "float") -- get device "float" attribute sdm.attr_set(attr, 3 / 2 ~= 1) -- set to true if firmware supports floating point instructions end ) sdm.attr_add(drv, "float", "Floating point build", false, function(drv) -- attribute value is set inside "_init" function local attr = sdm.attr_drv_handle(drv, "float") return sdm.attr_data(attr) -- just return stored value end, nil ) 

рдпрд╣ рдХреЛрдб рд╡рд┐рд╢реЗрд╖рддрд╛ float рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдлрд░реНрдорд╡реЗрдпрд░ рдмрд┐рд▓реНрдб рдкреНрд░рдХрд╛рд░ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорд╛рди _init() рд╣реБрдХ рдореЗрдВ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рд╣реИ, рдЬреЛ рдПрдХ рдмрд╛рд░ рддрдм рдЪрд▓рддрд╛ рд╣реИ рдЬрдм рдбреНрд░рд╛рдЗрд╡рд░ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИред


рдпрд╣ рд░реВрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреЗрдЬ рд╣реИред



рдпрд╣рд╛рдВ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд░реВрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ heap , рджреЛ рдбреНрд░рд╛рдЗрд╡рд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ float рдФрд░ id ред рдЕрдВрдд рдореЗрдВ, рдЗрд╕рдореЗрдВ рджреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ - рдПрд╕рдкреАрдЖрдИ рдФрд░ 1 рд╡рд╛рдпрд░ рдмрд╕реЗрдВред


рдПрд╕рдкреАрдЖрдИ


SPI рдбреНрд░рд╛рдЗрд╡рд░ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл NodeMCU SPI рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореИрдк рдХрд░рддрд╛ рд╣реИред



MCP3208


MCP3208 рдПрдХ ADC рдЪрд┐рдк рд╣реИред рдпрд╣ 12 рдмрд┐рдЯ рдХреЛрдб рдХреЛ рд░реЗрдлрд░реА рдФрд░ рд░рд┐рдЯрд░реНрди рд╢реВрдиреНрдп рд╕реЗ рд╡реЛрд▓реНрдЯреЗрдЬ рдорд╛рдкрддрд╛ рд╣реИред рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ ref рдХреЗрд╡рд▓ рддрднреА рдореМрдЬреВрдж рд╣реЛрдЧреА рдЬрдм рдлрд░реНрдорд╡реЗрдпрд░ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдирд┐рд░рдкреЗрдХреНрд╖ рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЗ рдмрдЬрд╛рдп, рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЛрдб single рдФрд░ differential рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рд╕реЗ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред


 sdm.method_add(drv, "single", "Single ended measure 0|1|2|3|4|5|6|7", function(dev, channel) -- ... if ref ~= nil then -- this part is executed only if floating point arithmetic is enabled rv = ref * rv / 4096 end return rv end ) if 3/2~=1 then -- other alternative is to access ESP8266 "float" method sdm.attr_add(drv, "ref", "Reference voltage", 5, function(dev) return sdm.attr_data(sdm.attr_handle(dev, "ref")) end, function(dev, value) sdm.attr_set(sdm.attr_handle(dev, "ref"), value) end ) end 


рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдЙрдкрдХрд░рдг рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ ref рдХреЛ рдирд┐рдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдкреНрд░рддрд┐ рдЙрдкрдХрд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


1wire


1 рдЪрд╛рд▓рдХ рдЪрд╛рд▓рдХ poll рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ - рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдЦреЛрдЬ ред


рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЦреЛрдЬ рдХреЗ рдареАрдХ рдмрд╛рдж рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓ рдкрд╛рдпрд╛ рд╣реИред рддреЛ рдЗрд╕рдХрд╛ 1 рд╡рд╛рдпрд░ рдЕрджреНрд╡рд┐рддреАрдп рдкрддрд╛ рдПрдХ рдирдП рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдмрд╛рдЗрдЯреНрд╕ рдХреЛ _ рд╡рд░реНрдг рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред


 sdm.method_add(drv, "poll", "Poll for devices", function(bus, pin) local children = sdm.device_children(bus) or {} -- already attached local ids = {} -- get IDs of attached devices for name, handle in pairs(children) do local dpin = sdm.attr_data(sdm.local_attr_handle(handle, "pin")) if dpin == pin then ids[sdm.attr_data(sdm.local_attr_handle(handle, "id"))] = true end end ow.reset_search(pin) -- reset previous search while true do -- for all found devices local id = ow.search(pin) if id == nil then break end if ids[id] == nil then -- if not already present local name = "" for i=1,#id do name = name .. tostring(id:byte(i)) .. "_" end name = name:sub(1,-2) -- add to system with their ID used as name local device = sdm.device_add(name, bus) -- add "pin" attribute local rv = sdm.local_attr_add(device, "datapin", nil, pin, nil, nil) -- add "id" attribute local rv = sdm.local_attr_add(device, "id", nil, id, nil, nil) -- poll for driver local rv = sdm.device_poll(device) end end end ) 

рдпрд╣ 1Wire рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреГрд╖реНрда рд╣реИред



рддрд░реНрдХ 2 рдФрд░ рддрд╛рдЬрд╝рд╛ рдкреГрд╖реНрда рдХреЗ рд╕рд╛рде poll рдХреЙрд▓ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдмрдЪреНрдЪреЗ рдЕрдиреБрднрд╛рдЧ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдмрдЪреНрдЪреЛрдВ рдХреЗ рдирд╛рдо рдорд╛рдирд╡ рдкрдардиреАрдп рд╣реИрдВред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ device_rename() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрдирдХреЗ _init рджреМрд░рд╛рди рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред



DS18S20


рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдкрд░, DS18S20 рдбреНрд░рд╛рдЗрд╡рд░ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ ID 0x10 рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░рд┐рд╡рд╛рд░ рдХреЛрдб рд╣реИред рдЬрдм рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдбреНрд░рд╛рдЗрд╡рд░ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ DS18S20-X рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ DS18S20 рдПрдХ DS18S20 рд╣реИ рдФрд░ X рдПрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдирдВрдмрд░ рд╣реИред


 sdm.method_add(drv, "_poll", nil, function(dev, drv, par) local attr = sdm.attr_data(sdm.local_attr_handle(dev, "id")) if attr == nil then return false end return (sdm.device_name(par) == "ESP8266_1W") and (attr:byte(1) == 0x10) -- check family ID end ) sdm.method_add(drv, "_init", nil, function(dev, drv, par) sdm.device_rename(dev, sdm.request_name("DS18S20")) -- rename device sdm.attr_copy(dev, "temp") -- copy attribute to device local met = sdm.method_dev_handle(par, "setup") local func = sdm.method_func(met) -- use parent "setup" method on the device func(par, dev) end ) 


рд╕реНрдерд╛рдиреАрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ id рдФрд░ datapin рдФрд░ setter рд╣реБрдХ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдирд╛рдо рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред


DS18B20


DS18B20 рдбреНрд░рд╛рдЗрд╡рд░ рд▓рдЧрднрдЧ DS18S20 рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд╕рдорд╛рди рд╣реИред рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ precision рд╡рд┐рдзрд┐ рд╣реИред рджреЛрдиреЛрдВ DS18; 20 рдбреНрд░рд╛рдЗрд╡рд░ рдкреВрд░реНрдгрд╛рдВрдХ рдмрд┐рд▓реНрдб рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдбрд┐рд╡реАрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред


 sdm.attr_add(drv, "precision", "Precision (9|10|11|12)", 12, function(dev, precision) local attr = sdm.attr_dev_handle(dev, "precision") return sdm.attr_data(attr) end, function(dev, precision) local par = sdm.device_parent(dev) local attr = sdm.attr_dev_handle(dev, "precision") local ex = sdm.method_func(sdm.method_dev_handle(par, "exchange")) local modes = {[9]=0x1f, [10]=0x3f, [11]=0x5f, [12]=0x7f} if modes[precision] ~= nil then ex(par, dev, {0x4e, 0, 0, modes[precision]}) sdm.attr_set(attr, precision) end end ) 


рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ


ESP8266 рдореБрдлреНрдд рдореЗрдореЛрд░реА рд▓рдЧрднрдЧ 40k рд╣реИ ред рд╕рд░реНрд╡рд░ рдХреЛрдб рдХреЛ LFS рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрд░рдВрднреАрдХрд░рдг рд╕рдордп рдкрд░ рдХреЛрдИ рд░реИрдо рд╕реНрдерд╛рди рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ ( рдореВрд▓ рдХреЛрдб рд▓рдЧрднрдЧ 10k рд▓рд┐рдпрд╛ рдЧрдпрд╛)ред


рдПрд╕рдбреАрдПрдо 5 рдбрд┐рд╡рд╛рдЗрд╕ рдЪрд╛рд▓рдХреЛрдВ рдФрд░ 5 рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 10k рд▓реЗрддрд╛ рд╣реИред рдЧреИрд░-рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдлрд╝рд░реНрдорд╡реЗрдпрд░ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдХрдоред рдЗрд╕рд▓рд┐рдП рд╣рд╛рде рдореЗрдВ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдореГрддрд┐ рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдп vue.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╕реЗрд╡рд╛ vue.js рд╣реИред



рдХрдЪреНрдЪреЗ JSON -encoded рдбреЗрдЯрд╛ ( curl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╢рд┐рдЦрд░ рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдХрд╛рдлреА рдХрдо рд╣реЛ рд╕рдХрддреА рд╣реИред



рдПрдХ рдЙрдкрд╕рдВрд╣рд╛рд░ рдХреЗ рдмрдЬрд╛рдп


рдкрд╣рд▓реЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ sdm рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдерд╛, рдЙрд╕рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдпрдХрд╛рд░реА рдерд╛
node.restart() ред
рд╡реЗрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рд╕реЗ рдПрдХ рдЙрддреНрд╕реБрдХ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рд╣реБрдЖред рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдЬрд╛рд░реА рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдареАрдХ рдмрд╛рдж, рдЪрд┐рдк рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ NodeMCU рдиреЗ HTTP рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдХрд╛ рдареАрдХ рд╕реЗ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдиреЗ рдлрд┐рд░ рд╕реЗ рд╡рд╣реА рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдЬрдм NodeMCU рд╕рд░реНрд╡рд░ рдкреБрдирдГ рдЖрд░рдВрдн рд╣реБрдЖ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЪрд╛рд▓реВ рд╣реБрдЖ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрд╕рд╕реЗ рдЬреБрдбрд╝рд╛, рдЖрдВрддрд░рд┐рдХ рдкреНрд░рдпрд╛рд╕ рдлрд┐рд░ рд╕реЗ рдХрд╛рдЙрдВрдЯрд░ рдкрд░ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ node.restart() рдХрд╣рд▓рд╛рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/hi449992/


All Articles