物联网嵌入式【免费下载链接】nodemcu-firmwareLua based interactive firmware for ESP8266, ESP8285 and ESP32项目地址https://gitcode.com/gh_mirrors/no/nodemcu-firmware点击查看免费下载本指南以本仓库 bh1750_CN.md 文档为主体结合 bh1750.lua 源码与配套示例系统讲解在 NodeMCU 固件上通过 I²C 总线驱动 BH1750GY-30数字环境光传感器的方法。读完本文你将掌握该 Lua 模块的加载/释放、引脚初始化、数据读取与 Lux 值换算的完整实战流程并理解其底层 I²C 通信原理。一、模块概览一个轻量的 I²C 光照采集方案BH1750常见于 GY-30 模块是一款数字环境光传感器通过 I²C 接口输出 16 位光照强度数据无需额外换算即可获得 Lux 勒克斯值。本仓库中的 Lua 模块最初由 Martin Han 于 2015-01-30 提交维护记录见 docs/lua-modules/bh1750.md。该模块以纯 Lua 实现运行在 NodeMCU 固件之上核心文件与配套资源位于lua_modules/bh1750/目录bh1750.lua模块主体实现bh1750_CN.md中文 API 文档bh1750_EN.md英文 API 文档bh1750_Example1.lua周期性采集示例bh1750_Example2.lua联网上报云端示例。重要依赖此模块依赖固件内置的i2cC 模块源码见 app/modules/i2c.c。构建固件时需确保user_modules.h中启用了i2c模块否则require(bh1750)后无法正常通信。ESP8266 芯片本身没有硬件 I²C 控制器NodeMCU 固件使用软件 I²C 驱动因此 SDA/SCL 可以自由选择任意可用 GPIO详见 i2c 模块文档这正是本模块init(sda, scl)需要显式传入引脚号的原因。二、模块加载与释放加载requirebh1750 require(bh1750)require会执行 bh1750.lua 并返回模块表M其中封装了init、read、getlux三个公开方法。释放bh1750 nil package.loaded[bh1750] nil这两行分别断开全局引用、清除 Lua 模块缓存使模块可以被重新加载或回收内存适合在需要更换引脚或重跑初始化流程时使用。三、bh1750.init(sda, scl)初始化 I²C 引脚描述设置 BH1750 所在的 I²C 引脚并完成 I²C 总线初始化。语法bh1750.init(sda, scl)参数参数取值范围说明sda1 ~ 12SDA 数据线的 IO indexI/O 索引号scl1 ~ 12SCL 时钟线的 IO indexI/O 索引号注意参数是IO indexNodeMCU 风格的引脚索引并非 GPIO 编号本身。以文档示例为例SDA_PIN 6 -- sda pin, GPIO12 SCL_PIN 5 -- scl pin, GPIO14 bh1750 require(bh1750) bh1750.init(SDA_PIN, SCL_PIN)即 IO index6对应 GPIO12IO index5对应 GPIO14。这一映射关系在固件底层的 pin_map.c 引脚映射表中可查证表中按顺序将 GPIO16、GPIO5、GPIO4、GPIO0、GPIO2、GPIO14、GPIO12……依次编号为 index 0、1、2、3、4、5、6……。返回值nil底层行为从源码 bh1750.lua 可以看出init实际执行的是i2c.setup(id, sda, scl, i2c.SLOW) init true其中id固定为0总线 0速度固定为i2c.SLOW标准模式100 kHz。init true这个内部标记会在read()中用于校验是否已初始化。I²C 总线采用开漏模式工作SDA 与 SCL 线上通常需要 1k10k 的上拉电阻多数 GY-30 成品模块已板载上拉可直接接线使用。四、bh1750.read()触发一次数据读取描述从 BH1750 中读取一次光线传感器数据并将结果缓存在模块内部供getlux()提取。语法bh1750.read()参数无。返回值nil真正的 Lux 数据需通过getlux()获取。底层读取流程read() 的实现 会先检查init标志function M.read() if (not init) then print(init() must be called before read.) else read_lux() end end如果忘记调用init()就执行read()控制台会打印init() must be called before read.的提示这是排查问题时最常见的一条报错信息。成功读取后内部走的是标准的 I²C 写命令 读数据流程read_data 函数i2c.start(id)发送起始条件i2c.address(id, 0x23, i2c.TRANSMITTER)以写模式寻址传感器地址0x23即 GY-30 模块默认的 I²C 从机地址i2c.write(id, CMD)写入测量命令CMD 0x10连续 H 分辨率模式i2c.stop(id)结束写操作再次i2c.start(id)以i2c.RECEIVER读模式重新寻址通过tmr.delay(200000)等待传感器完成 A/D 转换i2c.read(id, 2)读取 2 字节原始数据i2c.stop(id)收尾。这一段调用链与 i2c 模块文档 中描述的i2c.start/address/write/stop/read用法完全对应可作为理解底层原理的参照。五、bh1750.getlux()提取 Lux 数据描述获取最近一次read()得到的光照强度数据。语法bh1750.getlux()参数无。返回值l整数Lux 计数。注意这里的返回值放大了 100 倍即实际照度单位 lxl / 100因此文档示例采用如下格式化输出SDA_PIN 6 -- sda pin, GPIO12 SCL_PIN 5 -- scl pin, GPIO14 bh1750 require(bh1750) bh1750.init(SDA_PIN, SCL_PIN) bh1750.read() l bh1750.getlux() print(lux: ..(l / 100).....(l % 100).. lx) -- release module bh1750 nil package.loaded[bh1750]nil换算原理从源码 read_lux 函数 可以看到换算公式local UT dataT:byte(1) * 256 dataT:byte(2) l (UT*1000/12)dataT:byte(1) * 256 dataT:byte(2)将两个字节拼成 16 位原始计数值l UT * 1000 / 12等价于UT / 1.2 × 100。BH1750 在 H 分辨率模式下每个计数单位约对应 1.2 lx 的照度因此UT / 1.2得到实际照度lx再乘以 100 即为模块返回的整数l。由于 Lua 中整数除法会截断放大 100 倍可以保留两位小数精度这也是示例中(l / 100).....(l % 100)这种打印方式的由来。六、实战示例一定时周期采集光照强度Example1 演示了使用 NodeMCU 定时器tmr每 10 秒自动采集一次的完整用法适合长期运行的环境光监测场景local bh1750 require(bh1750) local sda 6 -- sda pin, GPIO12 local scl 5 -- scl pin, GPIO14 do bh1750.init(sda, scl) tmr.create():alarm(10000, tmr.ALARM_AUTO, function() bh1750.read() local l bh1750.getlux() print(lux: ..(l / 100).....(l % 100).. lx) end) end要点说明bh1750.init(sda, scl)只需执行一次tmr.create():alarm(10000, tmr.ALARM_AUTO, ...)创建自动循环定时器每隔 10000 ms 触发一次回调回调内先read()触发读取再getlux()取值二者必须成对使用。七、实战示例二采集数据联网上报Example2 展示了将光照数据通过 HTTP POST 上报到云平台的思路适用于把传感器接入物联网云端场景。核心流程如下local bh1750 require(bh1750) local sda 6 local scl 5 local ServerIP do bh1750.init(sda, scl) tmr.create():alarm(60000, tmr.ALARM_AUTO, function() bh1750.read() local l bh1750.getlux() -- 定义数据变量格式 local PostData [{\Name\:\T\,\Value\:\ ..(l / 100).....(l % 100)..\}] -- 创建 TCP 连接 local socket net.createConnection(net.TCP, 0) -- 域名解析 socket:dns(www.lewei50.com, function(_, ip) ServerIP ip print(Connection IP: .. ServerIP) end) -- 连接服务器 socket:connect(80, ServerIP) socket:on(connection, function() end) -- 发送 HTTP POST 请求 socket:send(POST /api/V1/gateway/UpdateSensors/LW_GATEWAY HTTP/1.1\r\n .. Host: www.lewei50.com\r\n .. Content-Length: .. string.len(PostData) .. \r\n .. userkey: USERKEY\r\n\r\n .. PostData .. \r\n) -- 打印 HTTP 响应 socket:on(receive, function(sck, response) -- luacheck: no unused print(response) end) end) end该示例涉及的网络 APInet.createConnection、socket:dns、socket:connect、socket:send等属于 NodeMCU 的net模块能力使用时需将LW_GATEWAY设备标识与USERKEY用户密钥替换为自己的实际凭据。八、底层实现细节与注意事项固定常量一览从 bh1750.lua 源码中可确认以下硬编码常量| 常量 | 值 | 含义 | | ---- | -- | ---- | |GY_30_address|0x23| BH1750 / GY-30 的 I²C 从机地址 | |id|0| 固定使用 I²C 总线 0 | |CMD|0x10| 连续 H 分辨率测量命令0x10 | | 读取字节数 |2| 16 位测量结果 |由于地址、总线号、测量命令均为硬编码模块开箱即用无需额外配置但这也意味着如果硬件上通过 ADDR 引脚将地址改成了0x5C或需要同时挂接多片同地址传感器就需要自行修改源码地址、总线号层面。I²C 速度与稳定性模块以i2c.SLOW100 kHz 标准模式初始化总线这是保守且兼容性最好的选择。若自行改用更高速率需参考 docs/modules/i2c.mdi2c.FAST400 kHz、i2c.FASTPLUS1 MHz需 CPU 160 MHz。ESP8266 的 I²C 为软件实现遇到时序问题时可适当降低速率。使用限制提醒必须先 init 再 read未初始化就调用read()只会打印提示而不会读取数据read/getlux 成对使用read()返回nil数据缓存在模块内部必须通过getlux()取出固件需包含 i2c 模块否则模块无法工作构建固件时注意在 app/include/user_modules.h 中启用i2cGPIO 选择引脚参数为 IO index112推荐参照示例使用 GPIO12/GPIO14 等常规引脚GPIO16 虽可作 SCL 但速度受限且可能与深睡复位冲突详见 i2c 模块文档。九、小结BH1750 的 NodeMCU Lua 模块以极简的三函数 APIinit/read/getlux封装了完整的 I²C 读写流程通过i2c.setup初始化总线、以0x10命令触发连续 H 分辨率测量、读取 2 字节原始数据并按UT*1000/12换算为放大 100 倍的 Lux 整数。无论是本地周期采集Example1还是联网上报Example2掌握上述 API 语义与换算原理后即可快速将 BH1750 集成到自己的光照监测项目中。赞分享物联网嵌入式【免费下载链接】nodemcu-firmwareLua based interactive firmware for ESP8266, ESP8285 and ESP32项目地址https://gitcode.com/gh_mirrors/no/nodemcu-firmware点击查看免费下载相关推荐NodeMCU 固件 BH1750 环境光传感器 Lua 模块完整指南NodeMCU 固件 BH1750 环境光传感器 Lua 模块完整指南 导读 本文面向在 NodeMCUESP8266/ESP8285上使用 Lua 开发环物联网嵌入式NodeMCU hx711 模块基于 HX711 称重传感器 ADC 的 Lua 驱动完全指南NodeMCU hx711 模块基于 HX711 称重传感器 ADC 的 Lua 驱动完全指南 导读 本文面向在 NodeMCUESP8266/ESP828物联网嵌入式NodeMCU BME680 模块指南基于 Lua 的环境传感器集成实战NodeMCU BME680 模块指南基于 Lua 的环境传感器集成实战 NodeMCU 固件为 Bosch BME680 温/湿/气压与气体VOC传感器物联网嵌入式上一篇深度解析现代Web签名技术Signature Pad架构设计与性能优化指南下一篇构建高分辨率二分图像分割解决方案BiRefNet专业部署指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
MikroORM 6.6 常见问题(FAQ)实战指南:从 CLI 故障排查到 Schema 同步与类型推断 后端 【免费下载链接】mikro-orm TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, MS SQL Server, PostgreSQL and SQLite/libSQL databases. 项目地址: https://gitcode.com/gh_mir… · 2026/9/27 21:39:21
1如何做网站推广:3招搞定性能优化与流量获取 1如何做网站推广:3招搞定性能优化与流量获取 模板网站太丑不够用?别急,这往往是因为你没搞懂背后的 性能优化 逻辑。很多站长盯着页面配色改到秃头,却忽略了加载速度对用户体验的毁灭性打击。 1如何做网站推广,核心不在花哨,而在稳定与速度。… · 2026/9/27 21:39:21
汽车电子电气架构(EE架构)手册 第六篇---电源架构设计 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。
老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 有人尊重你,你要清楚,他是尊重你的人品,还是你的位置。有人喜欢你,你要清楚,他是喜欢你的才华,还是你的财富。有人佩服你,你要清楚,他是佩服… · 2026/9/27 21:39:21
国内三家大模型修图能力对比:用 TaoToken 统一 Key 跑通评测脚本 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 22:05:07
基于SpringBoot社区邻里互助服务平台-附源码 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台… · 2026/9/27 22:05:07
网页设计和网站编辑一文搞懂:3步搞定域名服务器与SEO落地 网页设计和网站编辑一文搞懂:3步搞定域名服务器与SEO落地 很多新手刚接手网站项目,最头疼的不是代码写不出来,而是域名解析、服务器配置这些基础环节完全摸不着头脑。哪怕页面设计得再漂亮,如果底层架构没搭对,搜索引擎根本抓不到你的核心内容。今天… · 2026/9/27 22:05:07
Node + MongoDB 数据库配置:TaoToken 统一 Key 接入与 config 骨架 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 22:05:07
统一大模型API接入平台选型指南:企业与开发者如何评估多模型调用方案 应用与大型语言模型之间通常会插入一层中间服务,用来统一接口、管理多模型访问并控制成本。OpenRouter以托管模型市场的形式运作,通过单一账户覆盖大量模型;另一类方案则提供统一协议接入,让开发者用一套标准接口调用平台已上架的… · 2026/9/27 22:04:49
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01