对于我的室外传感器,我使用了一个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传感器的主机相关推荐

  1. 传感器 esp8266_使用esp8266作为I2C传感器的主机

    传感器 esp8266 对于我的室外传感器,我使用了一个RaspberryPi,它具有通过I 2 C连接的BMP180 + TSL2561,将传感器数据作为MQTT消息传输. 在法兰克福以代码为中心的 ...

  2. ESP8266+DHT11温湿度传感器+小爱同学语音智能LED灯(状态可视化)

    ESP8266+DHT11温湿度传感器+LED灯(状态可视化) 接线(继电器与DHT11模块的GND与VCC分别对应接好ESP8266即可,下表只列出信号线接法): 模块 ESP8266 继电器IN ...

  3. ESP8266上传传感器数据到远端与远端反向控制终端--Arduino

    上传传感器数据到远端与远端反向控制终端 功能 硬件连接 程序 后续 功能 集上传传感器数据到远端与远端反向控制终端 本例采用TCP协议,通过WiFi透传模式进行远端控制与传输.采用读取DHT11温湿度 ...

  4. Arduino ESP8266读取土壤湿度传感器 ADC

    土壤传感器实物图 它总共有四个引脚: VCC引脚:接电源正极 GND引脚:接电源负极 A0引脚:输出土壤湿度传感器的模拟电压值,输出范围为0-1023 D0引脚:输出土壤湿度传感器的开关量值,值为0, ...

  5. 技能梳理14@stm32+esp8266+ds18b20+红外传感器+烟雾传感器+CO传感器+蜂鸣器

    画板子,有至少8个io口(分别连ds18b20.红外传感器.烟雾传感器.CO传感器,后面3个传感器都是检测到就发高电平),2个串口,1个蜂鸣器,nbiot用的YED-C724 核心板(AIR724) ...

  6. 【ESP 保姆级教程】疯狂传感器篇 —— 案例:ESP8266 + MQ3酒精传感器 + webserver(局域网内曲线变化图)+ 自定义飞书告警

    忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️ ❤️ 本篇创建记录 2022-05-03 ❤️ ❤️ 本篇更新记录 2022-05-03 ❤️

  7. 【ESP 保姆级教程】 疯狂传感器篇 —— 案例:ESP8266 + MQ3酒精传感器 + webserver(局域网内曲线变化图)+ 自定义微信告警

    忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️ ❤️ 本篇创建记录 2022-05-01 ❤️ ❤️ 本篇更新记录 2022-05-01 ❤️

  8. 【ESP 保姆级教程】疯狂传感器篇 —— 案例:ESP8266 + MQ3酒精传感器 + webserver(局域网内曲线变化图)

    忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️ ❤️ 本篇创建记录 2022-04-22 ❤️ ❤️ 本篇更新记录 2022-04-22 ❤️

  9. 【ESP 保姆级教程】疯狂传感器篇 —— 案例:ESP8266 + MQ3酒精传感器 + 串口输出

    忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️ ❤️ 本篇创建记录 2022-03-30 ❤️ ❤️ 本篇更新记录 2022-04-05 ❤️

最新文章

  1. IBM发布迄今最强的量子处理器,面向商业和科研用途
  2. RAID重组和数据库数据的修复与验证
  3. linux搜索文件内容含有星号,文本内容查找grep、文件查找find、正则匹配
  4. 基于OSSIM的漏洞***测试视频教程
  5. 苹果屏幕上的小圆点_苹果或明年部署miniLED屏幕 最早用在Macbook上
  6. 歌浏览器的各个版本对应的webdriver(chromedrive)-超级详细
  7. TypeScript泛型详解
  8. 详细解读MySQL中的权限
  9. 身高回归现象是否真的存在?
  10. Sp_15_极限定理
  11. 视频教程-【思科CCNA理论专题:9】-- ACL理论-思科认证
  12. python程序设计基础电子书_python程序设计基础 pdf下载
  13. 如何将img镜像安装到硬盘、解决默认分区小的问题
  14. java开源cad_.Net开源项目(包含CAD支持)
  15. 各种网络协议的类型、优缺点、作用
  16. 考研数学常见的不等式及其证明
  17. 小程序05 canvas绘图并保存到相册
  18. pytorch-YOLOv3移植到寒武纪
  19. SQL SERVER数据库误删除误格式化误重装软件覆盖数据恢复修复
  20. xd卡数据丢失原因和三种数据恢复方法介绍

热门文章

  1. RAD Studio 10.2.3 Tokyo v25.0.31059.3231 ISO镜像官方下载
  2. AlexNet论文翻译《ImageNet Classification with Deep Convolutional Neural Networks》
  3. Python进行克里金插值可视化
  4. 墨茶,一个饿死在2021的少年
  5. 日常开发中的一些js处理数据的方法,包括对数据的过滤,以及对数据的验证
  6. 计算机网络测试—基本网络连接和通信考试
  7. 成都大数据急需人才培养基地落地天府软件园
  8. 8421.5421.2421.余3码的区别
  9. 如何借助网关实现组态软件的摄像头视频监控?
  10. 城市道路智慧照明系统方案