使用esp8266作为I2C传感器的主机
对于我的室外传感器,我使用了一个RaspberryPi,它具有通过I 2 C连接的BMP180 + TSL2561,将传感器数据作为MQTT消息传输。
在法兰克福以代码为中心的办公室举行的物联网会议期间,我们讨论了esp8266的用法,我很高兴能得到它并使用它。
很快就知道esp8266是非常好的硬件,我计划更换充当网络传感器主机的Raspberry Pi。 借助esp8266的wifi功能,我仍然可以使用MQTT方法运行I 2 C传感器。
例如 当前安装在户外的Raspberry Pi将值发送给这些主题
- sweethome /传感器/室外/温度
- sweethome /传感器/室外/压力
- sweethome /传感器/室外/ lux
如果让esp8266发布到这些主题,我的网络其余部分也不会意识到有变化...
计划:保留I
树莓派 | HUZAAH ESP8266突破 | |
SD卡: | 40€ | 10€ |
无线局域网 | 8€ | – |
总: | 52€ | 10€ |
能量消耗: | 3W | 1瓦 |
硬件
- Adafruit HUZZAH ESP8266突破
- Adafruit BMP180(温度+压力)
- Adafruit TSL2561(光度)
- Adafruit FTDI Friend(USB连接器)
集成开发环境
- Arduino IDE
图书馆
几乎所有库都可以通过Arduino IDE库管理器轻松安装。 除esp8266支持外,还必须设置其他董事会管理器URL: http ://arduino.esp8266.com/stable/package_esp8266com_index.json
- ESP8266WiFi
- Adafruit BMP085统一
- Adafruit TSL2561统一
- Adafruit MQTT库
软件
esp8266分支具有对LUA的内置支持,但我决定将其刷新以准备与Arduino IDE和C ++一起使用(主要是因为Adafruit都很好地支持了驱动程序)。
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085_U.h>
#include <Adafruit_TSL2561_U.h>/************************* WiFi Access Point *********************************/#define WLAN_SSID "Lummerland"
#define WLAN_PASS "****************"/************************* MQTT Broker Setup *********************************/const int MQTT_PORT = 1883;
const char MQTT_SERVER[] PROGMEM = "192.168.0.61";
const char MQTT_CLIENTID[] PROGMEM = "ESP-PUBLISHER-SERVICE";
const char MQTT_USERNAME[] PROGMEM = "********";
const char MQTT_PASSWORD[] PROGMEM = "********";// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;Adafruit_MQTT_Client mqtt(&client, MQTT_SERVER, MQTT_PORT, MQTT_CLIENTID, MQTT_USERNAME, MQTT_PASSWORD);/****************************** Feeds ***************************************/
const char TEMPERATURE_FEED[] PROGMEM = "sweethome/sensors/outdoor/temperature";
Adafruit_MQTT_Publish temperature_topic = Adafruit_MQTT_Publish(&mqtt, TEMPERATURE_FEED);const char PRESSURE_FEED[] PROGMEM = "sweethome/sensors/outdoor/pressure";
Adafruit_MQTT_Publish pressure_topic = Adafruit_MQTT_Publish(&mqtt, PRESSURE_FEED);const char LUMINOSITY_FEED[] PROGMEM = "sweethome/sensors/outdoor/lux";
Adafruit_MQTT_Publish luminosity_topic = Adafruit_MQTT_Publish(&mqtt, LUMINOSITY_FEED);Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);
Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345);/*************************** Sketch Code ************************************/void setup() {Serial.begin(115200);delay(10);Serial.println("Sensor Test");if (!bmp.begin()){Serial.print("Ooops, no BMP180 detected ... Check your wiring or I2C ADDR!");while (1);}else {Serial.println("BMP180 ready.");}if (!tsl.begin()){Serial.print("Ooops, no TSL2561 detected ... Check your wiring or I2C ADDR!");while (1);}else {Serial.println("TSL2561 ready.");}configureTSL2561();// Connect to WiFi access point.Serial.println();Serial.print("Connecting to ");Serial.println(WLAN_SSID);WiFi.begin(WLAN_SSID, WLAN_PASS);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println();Serial.println("WiFi connected");Serial.println("IP address: "); Serial.println(WiFi.localIP());
}void loop() {MQTT_connect();/* Get a new sensor event */sensors_event_t bmpEvent;bmp.getEvent(&bmpEvent);if (bmpEvent.pressure){float temperature;bmp.getTemperature(&temperature);Serial.print("Temperature: ");Serial.print(temperature);Serial.println(" C");Serial.print("Publish Temperature: ");if (! temperature_topic.publish(temperature)) {Serial.println("Failed");} else {Serial.println("OK!");}float pressure = bmpEvent.pressure;Serial.print("Pressure: ");Serial.print(pressure);Serial.println(" hPa");Serial.print("Publish Pressure: ");if (! pressure_topic.publish(pressure)) {Serial.println("Failed");} else {Serial.println("OK!");}}else{Serial.println("Sensor error");}sensors_event_t tslEvent;tsl.getEvent(&tslEvent);unsigned int luminosity = 0;if (tslEvent.light){luminosity = tslEvent.light;}Serial.print("Luminosity: ");Serial.print(luminosity);Serial.println(" lux");Serial.print("Publish Luminosity: ");if (! luminosity_topic.publish(luminosity)) {Serial.println("Failed");} else {Serial.println("OK!");}delay(5000);
}void configureTSL2561()
{/* You can also manually set the gain or enable auto-gain support */// tsl.setGain(TSL2561_GAIN_1X); /* No gain ... use in bright light to avoid sensor saturation */// tsl.setGain(TSL2561_GAIN_16X); /* 16x gain ... use in low light to boost sensitivity */tsl.enableAutoRange(true); /* Auto-gain ... switches automatically between 1x and 16x *//* Changing the integration time gives you better sensor resolution (402ms = 16-bit data) */tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS); /* fast but low resolution */// tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_101MS); /* medium resolution and speed */// tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_402MS); /* 16-bit data but slowest conversions */
}void MQTT_connect() {int8_t ret;// Stop if already connected.if (mqtt.connected()) {return;}Serial.print("Connecting to MQTT... ");while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connectedswitch (ret) {case 1: Serial.println("Wrong protocol"); break;case 2: Serial.println("ID rejected"); break;case 3: Serial.println("Server unavailable"); break;case 4: Serial.println("Bad user/password"); break;case 5: Serial.println("Not authenticated"); break;case 6: Serial.println("Failed to subscribe"); break;default: Serial.print("Couldn't connect to server, code: ");Serial.println(ret);break;}Serial.println("Retrying MQTT connection in 5 seconds...");mqtt.disconnect();delay(5000); // wait 5 seconds}Serial.println("MQTT Connected!");
}
要使程序在esp板上运行,您必须
使esp8266进入Flash模式
按住+按住“重置”按钮,然后按+按住“ GPIO0”按钮,然后释放“重置”按钮,然后释放“ GPIO0”按钮 ->红色LED点亮(亮度较低)
准备上传
打开串行监视器以查看发生了什么:
注意“ Board”,“ CPU Frequency”,“ Upload Speed”和“ Port”设置!
在上传之前,您可以通过单击“验证”来构建程序:
然后开始上传:
程序立即启动,并且串行监视器显示发生了什么:
要调试/监视MQTT消息,我正在使用MQTT.fx (当然;-)):
无需对我的网络的其他组件进行任何更改。 替换对(移动)客户端也是透明的:
翻译自: https://www.javacodegeeks.com/2015/09/using-the-esp8266-as-host-for-i2c-sensors.html
使用esp8266作为I2C传感器的主机相关推荐
- 传感器 esp8266_使用esp8266作为I2C传感器的主机
传感器 esp8266 对于我的室外传感器,我使用了一个RaspberryPi,它具有通过I 2 C连接的BMP180 + TSL2561,将传感器数据作为MQTT消息传输. 在法兰克福以代码为中心的 ...
- ESP8266+DHT11温湿度传感器+小爱同学语音智能LED灯(状态可视化)
ESP8266+DHT11温湿度传感器+LED灯(状态可视化) 接线(继电器与DHT11模块的GND与VCC分别对应接好ESP8266即可,下表只列出信号线接法): 模块 ESP8266 继电器IN ...
- ESP8266上传传感器数据到远端与远端反向控制终端--Arduino
上传传感器数据到远端与远端反向控制终端 功能 硬件连接 程序 后续 功能 集上传传感器数据到远端与远端反向控制终端 本例采用TCP协议,通过WiFi透传模式进行远端控制与传输.采用读取DHT11温湿度 ...
- Arduino ESP8266读取土壤湿度传感器 ADC
土壤传感器实物图 它总共有四个引脚: VCC引脚:接电源正极 GND引脚:接电源负极 A0引脚:输出土壤湿度传感器的模拟电压值,输出范围为0-1023 D0引脚:输出土壤湿度传感器的开关量值,值为0, ...
- 技能梳理14@stm32+esp8266+ds18b20+红外传感器+烟雾传感器+CO传感器+蜂鸣器
画板子,有至少8个io口(分别连ds18b20.红外传感器.烟雾传感器.CO传感器,后面3个传感器都是检测到就发高电平),2个串口,1个蜂鸣器,nbiot用的YED-C724 核心板(AIR724) ...
- 【ESP 保姆级教程】疯狂传感器篇 —— 案例:ESP8266 + MQ3酒精传感器 + webserver(局域网内曲线变化图)+ 自定义飞书告警
忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️ ❤️ 本篇创建记录 2022-05-03 ❤️ ❤️ 本篇更新记录 2022-05-03 ❤️
- 【ESP 保姆级教程】 疯狂传感器篇 —— 案例:ESP8266 + MQ3酒精传感器 + webserver(局域网内曲线变化图)+ 自定义微信告警
忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️ ❤️ 本篇创建记录 2022-05-01 ❤️ ❤️ 本篇更新记录 2022-05-01 ❤️
- 【ESP 保姆级教程】疯狂传感器篇 —— 案例:ESP8266 + MQ3酒精传感器 + webserver(局域网内曲线变化图)
忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️ ❤️ 本篇创建记录 2022-04-22 ❤️ ❤️ 本篇更新记录 2022-04-22 ❤️
- 【ESP 保姆级教程】疯狂传感器篇 —— 案例:ESP8266 + MQ3酒精传感器 + 串口输出
忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️ ❤️ 本篇创建记录 2022-03-30 ❤️ ❤️ 本篇更新记录 2022-04-05 ❤️
最新文章
- IBM发布迄今最强的量子处理器,面向商业和科研用途
- RAID重组和数据库数据的修复与验证
- linux搜索文件内容含有星号,文本内容查找grep、文件查找find、正则匹配
- 基于OSSIM的漏洞***测试视频教程
- 苹果屏幕上的小圆点_苹果或明年部署miniLED屏幕 最早用在Macbook上
- 歌浏览器的各个版本对应的webdriver(chromedrive)-超级详细
- TypeScript泛型详解
- 详细解读MySQL中的权限
- 身高回归现象是否真的存在?
- Sp_15_极限定理
- 视频教程-【思科CCNA理论专题:9】-- ACL理论-思科认证
- python程序设计基础电子书_python程序设计基础 pdf下载
- 如何将img镜像安装到硬盘、解决默认分区小的问题
- java开源cad_.Net开源项目(包含CAD支持)
- 各种网络协议的类型、优缺点、作用
- 考研数学常见的不等式及其证明
- 小程序05 canvas绘图并保存到相册
- pytorch-YOLOv3移植到寒武纪
- SQL SERVER数据库误删除误格式化误重装软件覆盖数据恢复修复
- xd卡数据丢失原因和三种数据恢复方法介绍
热门文章
- RAD Studio 10.2.3 Tokyo v25.0.31059.3231 ISO镜像官方下载
- AlexNet论文翻译《ImageNet Classification with Deep Convolutional Neural Networks》
- Python进行克里金插值可视化
- 墨茶,一个饿死在2021的少年
- 日常开发中的一些js处理数据的方法,包括对数据的过滤,以及对数据的验证
- 计算机网络测试—基本网络连接和通信考试
- 成都大数据急需人才培养基地落地天府软件园
- 8421.5421.2421.余3码的区别
- 如何借助网关实现组态软件的摄像头视频监控?
- 城市道路智慧照明系统方案