Esp8266 mqtt arduino 无线多级控制照明灯

使用的是 ws2812数字灯珠 + esp826601s +mqtt 使用arduino IDE开发
能够实现使用mqtt控制多种亮度的灯珠

效果演示:链接

ws2812数字灯珠

enter description here
有信号的输入和输出
有信号的输入和输出

DO是信号输出 DI是信号输入
将多个RGB灯串联,信号进行传输然后实现灯带。
enter description here

有很多种 我使用是这种来充当led灯
enter description here

联合esp826601s使用

只需要一个GPIO给ws2812 信号端就可以
因此考虑使用esp8266 -01s的GPIO2

对esp8266 mqtt 使用arduino开发没有基础的同学可以先看这几篇文章

http://niehen.cn/esp8266/esp8266-mqtt-%e4%bd%bf%e7%94%a8arduino%e5%bc%80%e5%8f%91%e6%95%99%e7%a8%8b/

http://niehen.cn/esp8266/mqtt%e5%8d%8f%e8%ae%ae%e4%bb%8b%e7%bb%8d%e4%b8%8e%e5%ba%94%e7%94%a8/

http://niehen.cn/esp8266/esp8266-01s%e4%bb%8b%e7%bb%8d/

前期使用 fast led 库 多次尝试不成功,
查资料发现 由于ws2812 需要连续的扫描 频率很大,而esp01s频率不足所以在前期尝试的时候都没成功,但是使用ws2812只需要一个引脚 使用12f显得浪费

查找了很多资料发现使用Adafruit_NeoPixel.h 可以实现
下面会讲

只需要ws2812 的信号引脚接到 esp01s的GPIO2
5v接到电源5v
GND接地
这里推荐使用 这种模块 方便简单
enter description here

接线省事很多
enter description here

Adafruit_NeoPixel库

用于控制基于单线的LED像素和条带

安装

IDE内安装:

  • 在arduino IDE中 项目—》加载库----》管理库
  • 然后使用搜索栏搜索Neopixel strip。
  • 选择版本进行安装

源码安装:

  • 找到源码 GitHub链接下载下来
  • 下载后,将文件夹重命名为“ Adafruit_NeoPixel”并安装在Arduino Libraries文件夹中
  • 重新启动Arduino IDE,打开示例 找到这个库的示例代码
支持的芯片

enter description here

使用

有两种创建灯带形式

  • GRB:绿红蓝三基色 值从0到255
  • GRBW:在RGB的基础上加上一种白光,增加亮度的作用。

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800); // 创建 GRB灯带

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800); // 创建 GRBW灯带

在使用时 显示的形式不一样

函数

  • begin() 灯带初始化
  • setPixelColor() 设置灯带的颜色(第一个参数是灯珠索引,第二个是颜色值(GRB或GRBW))
  • setBrightness() 设置灯带的亮度(第一个参数是灯珠索引,第二个是亮度值0-255)
  • show() 显示灯带

    这些函数控制对象 就是前面创建的灯带对象(可以看下面的示例代码)

在使用时可以根据自己需要显示的样子
编写控制灯珠颜色 亮度变化的代码
当然也可以使用这个库提供的一些示例代码 也是很有意思的

示例代码

内含注释

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

//使用的引脚
#define PIN            6
//数字灯珠数量
#define NUMPIXELS      16

// 当我们设置NeoPixel库时,我们告诉它要使用多少像素,以及使用哪个pin发送信号。

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int delayval = 500; // delay for half a second
void setup() {
  // 这是5V 16MHz的小饰品,如果不使用小饰品,可以去掉这三条线
#if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
  pixels.begin(); // 这将初始化neopix库。
}
void loop() {

  // 对于一组NeoPixel,第一个NeoPixel是0,第二个是1,一直到像素数减1为止.
  for(int i=0;i<NUMPIXELS;i++){
    // pixels.Color 设置RGB的值 区间是 0,0,0 到 255,255,255
    pixels.setPixelColor(i, pixels.Color(0,150,0)); // 中等明亮的绿色。
    pixels.show(); // 这会将更新的像素颜色发送到硬件。
    delay(delayval); // 延迟一段时间(以毫秒为单位)。
  }
}

这个库的GitHub链接

代码

在这个项目中 只需要显示白色
多级调节 其实也就是调节灯珠的亮度
mqtt发过来一个数字值,然后控制亮度变化
思路很简单

我使用的参考代码在下方

使用的函数

将LED灯珠变为全部白色 设置亮度只需要改变传入的第一个参数即可

在亮度等级调整的时候,为了变换没有那么突兀,程序里面采用的是逐渐变化.而不是直接的全部设为目标亮度。


int bright = 0;
void pulseWhite(uint8_t result,uint8_t wait) {  // 第一个参数为要变为的亮度值 第二个参数为变化间隔的时间单位为毫秒
  if (bright < result){
  for(int j = bright; j < result ; j++){
      for(uint16_t i=0; i<pixels.numPixels(); i++) {
          pixels.setPixelColor(i, pixels.Color(j,j,j) );
        }
        delay(wait);
        pixels.show();
      }
      bright = result;
  }else if(bright > result){
  for(int j = bright; j >= result ; j--){
      for(uint16_t i=0; i<pixels.numPixels(); i++) {
          pixels.setPixelColor(i, pixels.Color(j,j,j) );
        }
        delay(wait);
        pixels.show();
      }
      bright = result;
  }  
}

更多学习教程

ESP开发学习基础知识

基础知识包括对esp模块的认识与了解 mqtt协议的了解,arduino IDE运用代码编写等等。

  1. arduino基础学习
  2. esp系列模块的介绍
  3. mqtt协议的介绍与使用
  4. 利用mqtt esp模块 基于arduino IDE开发方法
  5. esp模块的AT指令 刷固件
  6. esp模块睡眠模式使用
  7. esp8266-01s介绍与使用
  8. esp8266-12f介绍与使用
  9. NodeMcu介绍与使用
esp开发IOT应用

基于esp8266的模块以及其他模块根据实际的应用场景与需求制作的物联网应用

  1. 基于FRID arduino 继电器 电磁锁开发的FRID门禁系统
  2. esp32-cam获取视频流图像处理
  3. 基于步进电机 esp8266 mqtt开发的自动窗帘控制
  4. 基于DHT11 Esp8266 mqtt获取室内温湿度
  5. 基于CCS811 esp8266 mqtt 获取室内空气质量
  6. 基于红外模块 esp8266 mqtt开发的智能遥控控制
  7. 基于ws2812 esp8266 mqtt开发的智能多级照明灯
  8. 基于ws2812 esp8266 mqtt开发的智能多模式氛围灯
  9. 基于mp3player esp8266 mqtt开发的智能语音播报系统
  10. IOT综合应用之智慧教室项目开发

如果以上内容对你有帮助或是对IOT开发感兴趣,欢迎关注我。

本人接下来一段时间承接人脸图像处理,IOT开发等相关项目(毕设 比赛等)
有需要可联系qq:1639206518

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: ESP8266是一款低成本、低功耗的Wi-Fi模块,可以用于物联网应用。MQTT是一种轻量级的消息传输协议,适用于物联网设备之间的通信。Arduino是一款开源的电子原型平台,可以用于控制各种设备。将ESP8266和Arduino结合使用,可以实现物联网设备的远程控制和数据传输。 ### 回答2: ESP8266是一款集成了WiFi模块的微控制器芯片,可以用于实现Internet of Things(IoT)场景下的无线通信。MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布-订阅型的消息传输协议,适用于物联网场景下的设备间通信。而Arduino则是一款开源的电子开发平台,可以用于开发和控制物联网设备。 ESP8266可以通过支持的库连接到MQTT服务器,实现设备和服务器之间的通信。用户可以使用Arduino进行编程,实现ESP8266向指定的MQTT服务器发布数据或从MQTT服务器订阅数据。使用ESP8266 MQTT Arduino,可以快速搭建一个物联网设备,用于实现温度、湿度等传感器数据的获取,并且通过MQTT协议将数据上传至云端服务器,实现数据的实时监控和分析。具体的实现涉及到以下几个步骤: 1.连接WiFi网络:ESP8266可以通过WiFi模块连接到无线网络,可以使用Arduino的WiFi库实现。 2.连接MQTT服务器:ESP8266可以通过MQTT库连接到指定的MQTT服务器,实现发布和订阅消息。 3.传感器数据采集:使用传感器模块(如温度传感器)采集数据,可以使用ESP8266的模拟输入引脚或数字输入引脚。 4.实现发布和订阅数据: 使用ArduinoMQTT库,在ESP8266和MQTT服务器之间建立连接,实现向服务器发布传感器数据或从服务器订阅数据。 5.数据解析和处理:在MQTT服务器中对数据进行解析和处理,将数据发送到指定的终端或进行数据分析和处理。 总之,ESP8266 MQTT Arduino可以实现智能家居、环境监测、远程控制等多种应用场景。而细节上因人而异,可尝试结合具体问题进行分析和解决。 ### 回答3: ESP8266 MQTT Arduino 是一种复合技术,它有以下几个部分: 一、ESP8266 ESP8266是一款小巧的高集成度WLAN SoC芯片,它具有低功耗、价格便宜、易于集成等特点。ESP8266是一款高度智能化的芯片,具有出色的性能和稳定性。 二、MQTT MQTT是一种基于发布/订阅模式的消息传递协议,在物联网中发挥着重要的作用。MQTT可以在多个设备之间高效地传递数据,MQTT支持多种通信协议,包括TCP/IP、WebSockets和CoAP等。 三、Arduino Arduino是一种开源的硬件平台,它具有简单易用、功能强大、价格便宜等特点。Arduino具有强大的扩展性,可以通过不同的扩展板来为Arduino添加不同的功能。 利用ESP8266 MQTT Arduino技术,我们可以实现以下的功能: 1.监控环境温度、湿度等数据: 可以通过ESP8266连接传感器,实现环境温度、湿度等数据的监控。MQTT可将数据发布至订阅方。 2.远程控制家电: 可以通过MQTT实现远程控制家电,ESP8266连接到Arduino,实现对家电的开关控制。 3.实现智能家居: 利用ESP8266 MQTT Arduino技术,可实现智能家居系统的构建,如智能灯光控制、智能窗帘控制等。 总之,ESP8266 MQTT Arduino技术是一种重要的物联网技术,它的出现大大推进了物联网的发展,未来将拥有更加广泛的应用场景。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值