使用ESP8266接入“天猫精灵”控制七彩灯(WS2812)的颜色/亮度-开源

2023-11-18

前言:前面做了一个天猫精灵控制电视的例子点我查看,抱着对智能音响语音控制好奇的心态,看了一下Blinker中ESP8266接入天猫精灵控制七彩灯颜色/亮度、色温的介绍。经过一天的研究,于是有了这篇博客。在Blinker详细介绍了天猫精灵是如何接入以及灯控制颜色/亮度、查询亮度/颜色等函数的接口,有了前面天猫精灵控制电视的制作基础,这个例程就会相对简单一点。

演示视频

ESP8266接入天猫精灵控制七彩灯

1.准备工作

1.1 原理

----本实验的原理是使用ESP8266通过Blinker接入天猫精灵,接着把天猫精灵的账号和Blinker的账号进行绑定,这样一来就可以在天猫精灵的app看到Blinker需要接入天猫精灵的设备(且天猫精灵支持被控设备的自定义命名,可以通过自定义名字控制设备),通过天猫精灵呼叫设备的别名就可以达到控制七彩灯的目的。
----我们并不需要去关心他们的智能语音的通信协议,只需要在程序中识别对应的指令(指令已经给出且限定),并根据不同命令对外设(七彩灯)做不同的控制即可。

1.2 使用的硬件以及硬件连接图

  • 天猫精灵(方糖)
  • ESP8266 NodeMCU
  • WS2812灯环(24颗)
  • 普通按钮3个
    硬件连接图,大致如下所示:
    备注:
    实际硬件连接中,按钮的IO口和这里不同,以程序定义为准。
    在这里插入图片描述

1.3 开发环境准备

  • Arduino开发环境

安装地址:Arduino IDE

备注:安装1.8.7或更新版本,这个软件是免费使用的,直接在官网下载安装最新版本即可。

  • 安装ESP8266的扩展

方法一:如果你的电脑能够科学上网的话,使用这个方法很简便,在首选项中输入一个网址,然后添加库即可。否则参考方法二。

  1. 启动Arduino并打开“首选项”窗口。
  2. 输入https://arduino.esp8266.com/stable/package_esp8266com_index.json
    在这里插入图片描述
  3. 从工具>主板菜单打开Boards Manager并安装esp8266平台(安装后不要忘记从工具>主板菜单中选择ESP8266主板)。
    在这里插入图片描述
    方法二:下载打包的esp8266安装包,直接运行并解压即可。

链接:https://pan.baidu.com/s/1Eu0qhlP5xu6GgQMdwflfAw 提取码:3x1f

备注:如果安装过其他版本的esp8266sdk,请先删除,再使用本安装包,解压完成后,再打开Arduino IDE,即可在 菜单栏>工具>开发板 中找到你使用的esp8266开发板。

  • 安装blinker Arduino库

安装方法:下载后解压在Arduino/libraries文件夹下

链接:https://pan.baidu.com/s/1k5tED9HxgiRaqNtKrTJcRg 提取码:87lw

安装后如下图所示:
在这里插入图片描述
安装成功之后重启Arduino软件,可以在示例的第三方库库中找到。
在这里插入图片描述

  • 安装blinker APP
  • Android下载:点我进入
    或 在android应用商店搜索“blinker”下载安装
  • IOS下载:在app store中搜索“blinker”下载
  • 下载ws2812的驱动库

为了专注于我们感兴趣的事,驱动这些事就交给专业的人来做,在这里找到了一个非常好用的驱动库,适用于ESP8266,只需要简单的修改一下IO即可使用,简单好用。

  • 开源库github地址:点我查看
  • 开源库的使用:
    方法一:直接在Arduino IDE上安装
    1.在Arduino IDE中,导航至“项目”>“加载库”>“管理库”
    2.然后,库管理器将打开,您将找到已经安装或准备安装的库的列表。
    3.然后使用搜索栏搜索Neopixel strip。
    4.单击文本区域,然后选择特定版本并安装它。
    备注:如果不能科学上网,可能会有点慢。可使用方法二。
    在这里插入图片描述
    方法二:直接下载源文件的压缩包,然后添加压缩包到IDE
    1.导航到Releases page页面。
    2.下载最新版本。
    3.解压缩zip文件
    4.在Arduino IDE中,导航至“项目”>“加载库”>“添加.ZIP库”
    在这里插入图片描述
    安装完成之后,可以在Arduino IDE中找到这个第三方库的例子,如果有,则安装成功。如下:
    在这里插入图片描述

2. 配置Blinker App的UI界面

  • 注册账号
    使用手机号码即可注册账号。
  • 添加设备->wifi接入–>得到产品密钥(Secret Key)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 修改设备名字和图标
    备注:如果只需要天猫精灵控制,下面的操作都可以省略,只需要上面生成的Secret Key(需要写在代码中)
    在这里插入图片描述
    在这里我也只是编辑了一下app的界面而已,并没有在程序中设计出按键对应的功能,时间紧,以后再补充吧。
  • 界面大致如下:
    在这里插入图片描述

3.编写Arduino 程序

在这里还未写app的控制逻辑,后续补充。现在只能通过本地的按钮改变颜色(可以和云端同步),通过呼叫天猫精灵改变灯的颜色/亮度。

3.1 控制逻辑

使用ESP8266通过Blinker接入天猫精灵之后,调用天猫精灵官方提供的接口协议(这个协议并不需要我们处理,只需要其提供的函数中写相应的执行函数即可)去驱动ws2812彩灯,达到控制的目的。

3.2 新建一个Arduino程序,编写控制逻辑

接入流程:
在这里插入图片描述

  • 新建一个文件->另存为Timo_ws2812_control(程序名随意)
    在这里插入图片描述
以下详细解释一下核心代码:

1.添加头文件

//串口
#define BLINKER_PRINT Serial
//Blinker 接入方式:WiFi
#define BLINKER_WIFI
//天猫精灵接入的设备:灯
#define BLINKER_ALIGENIE_LIGHT
#include <Blinker.h>
//WS2812驱动
#include <Adafruit_NeoPixel.h>

2.定义变量:灯的颜色、亮度、状态、开关

//RGB颜色值
uint8_t colorR,colorG,colorB;
//亮度值:亮度初始值为50
uint8_t colorW=50;
//灯的模式
String wsMode;
//灯电源状态
bool wsState = false;

3.按钮端口的定义

//定义按钮为 GPIO0
#define BUTTON_PIN_0   0
#define BUTTON_PIN_1   1
#define BUTTON_PIN_2   2
//消除抖动使用的的变量以及模式
boolean oldState = HIGH;
boolean oldState2 = HIGH;
boolean oldState3 = HIGH;

4.WS2812驱动有关IO定义和设置

//定义ws2812使用的IO口为13(D7)
#define PIXEL_PIN    13  // Digital IO pin connected to the NeoPixels.
//定义ws2812灯的个数为24
#define PIXEL_COUNT 24  // Number of NeoPixels
// Declare our NeoPixel strip object:
/*
参数1:ws2812使用的灯的个数
参数2:ws2812驱动的引脚
参数3:驱动的模式和频率
*/

Adafruit_NeoPixel strip(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

5.初始化在setup()函数

void setup() {
  //串口初始化
  Serial.begin(115200);
  strip.begin(); // Initialize NeoPixel strip object (REQUIRED)
  //设置亮度
  strip.setBrightness(255 * colorW /100); // Set BRIGHTNESS to about 1/5 (max = 255)
  strip.show();  // Initialize all pixels to 'off'
  
  //调试有关
  #if defined(BLINKER_PRINT)
      BLINKER_DEBUG.stream(BLINKER_PRINT);
  #endif
  //初始化按钮为输入上拉
  pinMode(BUTTON_PIN_0, INPUT_PULLUP);
  pinMode(BUTTON_PIN_1, INPUT_PULLUP);
  pinMode(BUTTON_PIN_2, INPUT_PULLUP);

  
  //Blinker配网
  Blinker.begin(auth, ssid, pswd);
  Blinker.attachData(dataRead);
  /*注册天猫精灵有关的回调函数*/
  //状态查询
  BlinkerAliGenie.attachQuery(aligenieQuery);
  //亮度设置
  BlinkerAliGenie.attachBrightness(aligenieBright);
  //取消模式
  BlinkerAliGenie.attachCancelMode(aligeniecMode);
  //设置模式
  BlinkerAliGenie.attachMode(aligenieMode);
  //颜色控制
  BlinkerAliGenie.attachColor(aligenieColor);
  //电源状态
  BlinkerAliGenie.attachPowerState(aligeniePowerState);

}

备注:
用到哪个天猫精灵的函数,必须在初始化的时候注册回调函数。

6.当呼叫天猫精灵打开/关闭 门口的灯将调用接口函数:void aligeniePowerState(const String & state)
在这个函数进行打开灯,关闭灯的操作(默认打开亮度50,白色)

//电源状态
void aligeniePowerState(const String & state)
{
    BLINKER_LOG("need set power state: ", state);

    if (state == BLINKER_CMD_ON) {
        //设置为白色,亮度50%
        colorR = 255; colorG = 255; colorB = 255;
        colorWipe(strip.Color(colorR,colorG,colorB), 50);
        colorW = 50;
        strip.setBrightness(255 * colorW /100); // Set BRIGHTNESS to about 1/5 (max = 255)
        strip.show();
        BlinkerAliGenie.powerState("on");
        BlinkerAliGenie.print();
        wsState=true;
    }
    else if (state == BLINKER_CMD_OFF) {
     
        colorR = 0; colorG = 0; colorB = 0;
        colorWipe(strip.Color(colorR,colorG,colorB), 50);
        BlinkerAliGenie.powerState("off");
        BlinkerAliGenie.print();
        wsState=false;
    }
}

7.当呼叫天猫精灵设置 门口的灯颜色时,将调用接口函数 void aligenieColor(const String & color)
在这里进行颜色的设置

//设置颜色
void aligenieColor(const String & color)
{
    BLINKER_LOG("need set color: ", color);

    //如果是设置颜色,则灯的状态应该是打开的,故同步状态
    wsState = true;
    if (color == "Red") {
        colorR = 255; colorG = 0; colorB = 0;
        //colorWipe(strip.Color( 255,0,0), 50);    // Black/off
    }
    else if (color == "Yellow") {
        colorR = 255; colorG = 255; colorB = 0;
        //colorWipe(strip.Color(220,20,60), 50);
    }
    else if (color == "Blue") {
        colorR = 0; colorG = 0; colorB = 255;
        //colorWipe(strip.Color(0,0,255), 50);
    }
    else if (color == "Green") {
        colorR = 0; colorG = 255; colorB = 0;
        
    }
    else if (color == "White") {
        colorR = 255; colorG = 255; colorB = 255;
    }
    else if (color == "Black") {
        colorR = 0; colorG = 0; colorB = 0;
    }
    else if (color == "Cyan") {
        colorR = 0; colorG = 255; colorB = 255;
    }
    else if (color == "Purple") {
        colorR = 128; colorG = 0; colorB = 128;
    }
    else if (color == "Orange") {
        colorR = 255; colorG = 165; colorB = 0;
    }

    colorWipe(strip.Color(colorR,colorG,colorB), 50);
    //亮度默认为50
    //设置亮度
    colorW = 50;
    strip.setBrightness(255 * colorW /100); // Set BRIGHTNESS to about 1/5 (max = 255)
    strip.show();
    
    BlinkerAliGenie.color(color);
    BlinkerAliGenie.print();
}

备注:
天猫精灵支持的颜色如下:
在这里插入图片描述
8.当呼叫天猫精灵设置 门口的灯模式时,将调用接口函数 void aligenieMode(const String & mode)
在这里进行模式的设置

//设置灯的模式
void aligenieMode(const String & mode)
{
    BLINKER_LOG("need set mode: ", mode);
    //设置灯的模时,灯应该为打开状态
    wsState = true;
    if (mode == BLINKER_CMD_READING) {
        // Your mode function
        //阅读模式:灯的颜色设置为橙色,亮度为80%
        colorR = 255; colorG = 165; colorB = 0;
        colorWipe(strip.Color(colorR,colorG,colorB), 50);
        //设置亮度
        colorW = 80;
        strip.setBrightness(255 * colorW /100); // Set BRIGHTNESS to about 1/5 (max = 255)
        strip.show();
        
    }
    else if (mode == BLINKER_CMD_MOVIE) {
        // Your mode function
        //影院模式:灯的颜色设置为黄色,亮度为50%
        colorR = 255; colorG = 0; colorB = 0;
        colorWipe(strip.Color(colorR,colorG,colorB), 50);
        //设置亮度
        colorW = 50;
        strip.setBrightness(255 * colorW /100); // Set BRIGHTNESS to about 1/5 (max = 255)
        strip.show();
    }
    else if (mode == BLINKER_CMD_SLEEP) {
        // Your mode function
        //睡眠模式:灯的颜色设置为黄色,亮度为10%
        colorR = 255; colorG = 255; colorB = 0;
        colorWipe(strip.Color(colorR,colorG,colorB), 50);
        //设置亮度
        colorW = 10;
        strip.setBrightness(255 * colorW /100); // Set BRIGHTNESS to about 1/5 (max = 255)
        strip.show();
    }
    else if (mode == BLINKER_CMD_HOLIDAY) {
        // Your mode function
        theaterChase(strip.Color(  0,   0, 127), 50); // Blue
        //设置亮度:100%
        colorW = 100;
        strip.setBrightness(255 * colorW /100); // Set BRIGHTNESS to about 1/5 (max = 255)
        strip.show();
    }
    else if (mode == BLINKER_CMD_MUSIC) {
        // Your mode function
        //音乐模式:则为彩虹灯
        rainbow(10);
        //设置亮度:100%
        colorW = 100;
        strip.setBrightness(255 * colorW /100); // Set BRIGHTNESS to about 1/5 (max = 255)
        strip.show();
        
    }
    else if (mode == BLINKER_CMD_COMMON) {
        // Your mode function
        //普通模式:灯的颜色设置为白色,亮度为50%
        colorR = 255; colorG = 255; colorB = 255;
        colorWipe(strip.Color(colorR,colorG,colorB), 50);
        //设置亮度
        colorW = 50;
        strip.setBrightness(255 * colorW /100); // Set BRIGHTNESS to about 1/5 (max = 255)
        strip.show();
    }

    wsMode = mode;
    BlinkerAliGenie.mode(mode);
    BlinkerAliGenie.print();
}

备注:
在这里插入图片描述
9.当呼叫天猫精灵设置 门口的灯亮度时,将调用接口函数 void aligenieBright(const String & bright)
在这里进行亮度的设置

//天猫精灵亮度控制
void aligenieBright(const String & bright)
{
    int set_brightness;
    BLINKER_LOG("need set brightness: ", bright);

    if (bright == BLINKER_CMD_MAX) {
        colorW = 100;
    }
    else if (bright == BLINKER_CMD_MIN) {
        colorW = 0;
    }
    else {
        colorW = bright.toInt();
    }
    //进行亮度值转换
    set_brightness = 255 * colorW /100;

    //设置亮度
    strip.setBrightness(set_brightness); // Set BRIGHTNESS to about 1/5 (max = 255)
    strip.show();
    BLINKER_LOG("now set brightness: ", colorW);
    BlinkerAliGenie.brightness(colorW);
    BlinkerAliGenie.print();
}

10.当呼叫天猫精灵查询 门口的灯状态,将调用接口函数 void aligenieQuery(int32_t queryCode)
查询是调用内部函数的方式,不需要自己处理。

//天猫精灵状态查询
void aligenieQuery(int32_t queryCode)
{
    BLINKER_LOG("AliGenie Query codes: ", queryCode);

    switch (queryCode)
    {
        case BLINKER_CMD_QUERY_ALL_NUMBER :
            BLINKER_LOG("AliGenie Query All");
            BlinkerAliGenie.powerState(wsState ? "on" : "off");
            BlinkerAliGenie.brightness(colorW);
             BlinkerAliGenie.color(getColor());
            BlinkerAliGenie.print();
            break;
        case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
            BLINKER_LOG("AliGenie Query Power State");
            BlinkerAliGenie.powerState(wsState ? "on" : "off");
            BlinkerAliGenie.print();
            break;
        case BLINKER_CMD_QUERY_COLOR_NUMBER :
            BLINKER_LOG("AliGenie Query Color");
            BlinkerAliGenie.color(getColor());
            BlinkerAliGenie.print();
            break;
        case BLINKER_CMD_QUERY_MODE_NUMBER :
            BLINKER_LOG("AliGenie Query Mode");
            BlinkerAliGenie.mode(wsMode);
            BlinkerAliGenie.print();
            break;
        case BLINKER_CMD_QUERY_BRIGHTNESS_NUMBER :
            BLINKER_LOG("AliGenie Query Brightness");
            BlinkerAliGenie.brightness(colorW);
            BlinkerAliGenie.print();
            break;
        default :
            break;
    }
}

备注:
可以查询的状态如下:
在这里插入图片描述

注意事项:
1.填写代码中的auth,wifi账户、密码 在这里插入图片描述
至此为止,已经展示了绝大部分的源码,由于篇幅所限,且按键部分代码简单,就直接看文末的源码吧。

3.3 上传代码到ESP8266

在这里插入图片描述
备注:
程序上传成功之后,复位Node MCU,如果此时密钥、WiFi账号、密码没有错误,则可以在app看到设备的状态的为在线状态,则可进行下一步。
在这里插入图片描述

4.绑定天猫精灵并控制七彩灯

在这里插入图片描述
绑定设备步骤详情:
在这里插入图片描述
返回设备界面之后就可以看到设备详情啦。
在这里插入图片描述
此时,如果你的天猫精灵正常联网,对着天猫精灵说:

我: 天猫精灵,打开客厅。 天猫精灵: 很乐意为您效劳
我: 天猫精灵,把门口的灯设置为红色。 天猫精灵: 好的,正在将门口灯的颜色调整为红色
我: 天猫精灵,门口的灯打开了吗。 天猫精灵: 门口的灯处于打开状态,当前为正常模式,亮度为50,颜色为红色
我: 天猫精灵,把门口的灯亮读调整为20。 天猫精灵: 好的,正在将门口灯的亮度调整为20
我:天猫精灵,关闭门口的灯。天猫精灵:没问题!

备注:当然,如果需要对这个设备进行重命名也是OK,的详情参考:设备添加别名操作

小结
要把ESP8266接入天猫精灵是一件比较简单的事情,现在我们就可以对天猫精灵进行关于门口的灯各种命令的操作。其实最重要的还是天猫精灵接口的协议,以及我们对这些接口函数的操作。

总结

—到这里这个例程就结束了,相信看了这个例子,每一个人都能制作出炫酷的七彩智能灯。接入天猫精灵的灯并不限制个数,你可以使用多个ESP8266接入天猫精灵,然后逐个设备定义别名(例如:客厅的灯),在上一篇文章点我查看还接入了电视、空调等设备。增加或者减少一个设备并不会影响全局。你可以同时拥有10个灯、10个插座。如果定义了不同的别名,都可以对任意一个进行单独的操作,这样一来就会让控制变得很灵活。
—有了红外控制和继电器控制,你几乎可以把家里的大部分家电都接入天猫精灵,这只是一个开始!

源码地址点我跳转
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用ESP8266接入“天猫精灵”控制七彩灯(WS2812)的颜色/亮度-开源 的相关文章

  • ESP8266使用邮件客户端 Arduino 库发送邮件(兼容ESP32)

    使用 ESP8266 发送邮件可以方便地处理各种事情 可以让 ESP8266 直接访问您的邮件服务器 例如 Gmail Hotmail Outlook 并通过它发送邮件 但许多邮件服务器会拒绝从不同于邮件服务器的域 您的 ip 发送的邮件
  • 【esp8266】史上最详细的Arduino uno R3接入机智云教程

    原文地址 http club gizwits com thread 6728 1 1 html 本文使用arduino UNO板卡和esp8266无线WIFI模块实现了通过手机APP远程监测单片机系统采集的数据和控制一个LED的亮灭 读者将
  • STM32F407+ESP8266连接机智云过程详解

    工程创建 代码调试过程参见 STM32F407 ESP8266 程序源码下载 STM32F407 ESP8266连接机智云程序源码
  • 使用ESP8266和Blynk应用程序的远程房间恒温器

    该项目可通过您的手机通过家庭WiFi或移动网络的任何地方控制您的家庭供暖单元 基本上 它可以用远程控制器代替普通的可编程房间恒温器 作为遥控器 它使用安装了Blynk App并配置为可以满足所有需求的智能手机 智能手机和供暖系统之间的通信由
  • Anduino+esp8266_relay继电器 开发智能开关,APP可远程控制

    一 准备工作 1 在网上要购买一块ESP8266 01s带relay继电器的 价格10几元 2 网上购买一个USB转TTL的转接头 我自己用是CH340 价格几元 3 找一个服务器 当然免费的最好 我用的是酱菜创客平台 此平台是给创客提供一
  • 使用安信可IDE开发ESP8266时出现error: ld returned 1 exit status

    在 app Makefile中COMPONENTS eagle app v6 后面添加driver libdriver a 并在 app driver中添加Makefile文件 这里建议直接复制 examples IoT Demo文件夹并删
  • ESP8266+天猫精灵+贝壳物联 简单直接点亮一个LED灯

    本文将介绍如何通过天猫精灵透过贝壳物联来使ESP8266点亮一个灯 如果大家途中遇到什么奇葩问题 请努力移驾各大搜索神器或查看贝壳物联帮助文档解决 正所谓冤有头 本文主要分为以下几个部分哦 硬件部分 软件下载 软件工具和软件固件 固件刷写
  • STM32驱动8266-----8266AP模式

    找了很久 一直没有找到驱动的程序 查一些资料 字写了一个简单程序 记录分享一下 void esp8266 inittcp void printf AT CIPMODE 2 r n 设置AP模式 delay ms 10000 延时函数 pri
  • ESP8266之AT指令

    一 8266作为client 1 AT 功能 测试8266能否工作 2 AT CWMODE 3 功能 设置工作模式 1 station模式 2 ap模式 3 ap station复位保存当前值 3 AT RST 功能 复位 4 AT CWL
  • 构建配置ESP8266 MQTT服务器

    我们将了解ESP8266模块如何通过消息队列遥测传输 MQTT 相互通信 MQTT术语 已经使用了诸如中央代理 主题 发布 订阅之类的术语 因此现在该用类似于邮局的方式来解释它们了 消息是报纸或杂志 代理 这是一个接收客户端消息的软件应用程
  • NodeMcu arduino ESP8266WIFI 模块 WIFIAccessPoint 示例介绍,建立网络服务器进行TCP 请求 同步控制操作开发板的输出

    将ESP8266 创建网络服务器进行访问 同步控制操作开发板的输出 Create a WiFi access point and provide a web server on it 译 创建WiFi接入点并在其上提供web服务器 incl
  • esp8266学习笔记(5)——连接wifi、AP、UDP通信

    终于开始接触网络了 基础不行 这个摸索了有点久 还好网上资料多 有些细节还是没有怎么吃透 哈哈 开始联网了 ESP8266有三种模式 station模式 0x01 soft AP模式 0x02 soft AP station模式 0x03
  • ESP32/ESP8266使用MicroPython控制DHT11/DHT22

    本教程介绍了如何使用MicroPython固件将DHT11或DHT22温度和湿度传感器与ESP32和ESP8266开发板一起使用 DHT模块 刷新MicroPython固件 要遵循本教程 您需要在ESP32或ESP8266板上安装Micro
  • ESP8266开发板+mysql数据库+DHT11

    wemos D1 wifi ESP8266开发板连接mysql wemos D1 wifi ESP8266开发板是一款基于esp8266的开发板 使用这个开发板可以很方便的连接wifi 同时这个开发板有很多IO口供我们使用 这个开发板的可以
  • 玩转ESP8266-01——AT指令集

    该指令集是接上一个 链接 初识AT指令 全部是根据本人在使用esp8266过程中用过的指令 可能有不全 有错误 还请理解指正 一起学习 AT指令集 一 基础指令 1 测试指令 2 复位指令 重启 二 设置指令 1 设置波特率 2 设置工作模
  • 编译freeRTOS “error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token”错误解决

    今日编译ESP8266 RTOS SDK的时候有个头文件声明了extern 结构体 结果一旦加入这个头文件编译就各种报错 提示error expected asm or attribute before token 一通搜索之后并未解决我的
  • Arduino for ESP8266&ESP32适用库ESPAsyncWebServer:快速入门

    文章目录 目的 特征 安装 快速体验 注意事项 总结 目的 Arduino for ESP8266 和 Arduino for ESP32 中默认就有WebServer 不过这些WebServer都是同步的 不支持同时处理多个连接 这在很多
  • 制作OLED图标

    制作OLED图标 陈拓 2021 06 24 2021 06 26 1 概述 制作用于OLED显示的图标 获取C语言图像点阵数据 2 图标库 先准备图标图像 可以从图标库中找需要的图案 下面两个是我常用的图标网站 2 1 Font Awes
  • 嵌入式编程中的zalloc是什么?

    我正在研究对 ESP8266 串行 WiFi 芯片进行编程 在其 SDK 示例中 它广泛使用了一个名为os zalloc我期望的地方malloc 不过偶尔 os malloc也被使用 因此它们在功能上似乎并不相同 不幸的是没有文档 任何人都
  • 使用 SPIFFS 加载文件时出现问题 (ERR_CONTENT_LENGTH_MISMATCH)

    好吧 这两天我一直在研究这个问题 但我仍然觉得我一无所获 我最近开始使用SPIFFS 文件系统 for Arduino开发于呼扎 ESP8266像FSBrowser ino例如 虽然它在分离代码方面非常出色 但随着我的代码不断增长 它在稳定

随机推荐

  • javascript经典代码推荐

  • 基于Matlab的高精度轨道传播器模拟

    基于Matlab的高精度轨道传播器模拟 传播器模拟是一种常见的工程方法 用于预测和分析卫星 火箭或其他天体在轨道上的运动 在这篇文章中 我们将使用Matlab编写一个高精度轨道传播器模拟器 并提供相应的源代码 轨道传播器模拟器的主要目标是根
  • FRP服务器搭建成功后,配置多个客户端使用

    FRP内网穿透服务器搭建成功后 在服务器后台启动FRP 然后还需要两步 第一 在域名购买的网站 比如阿里云 配置一条所有子域名到服务器IP的规则 第二 配置多个客户端 A电脑的配置信息如下 common server addr 服务器IP
  • 前端八股文系列(四)4 JavaScript

    文章目录 前端八股文系列 四 4 JavaScript JS中的8种数据类型及区别 JS中的数据类型检测方案 1 typeof 2 instanceof 3 Object prototype toString call instanceof
  • LeetCode-1781. 所有子字符串美丽值之和【哈希表,字符串,计数】

    LeetCode 1781 所有子字符串美丽值之和 哈希表 字符串 计数 题目描述 解题思路一 简单暴力 双层循环 重点是分别记录子字符串 i j 的最大最小频率 注意这里当i变的时候 所有字符出现的频率就清理 否则在原来的基础上加就行 解
  • 栈的应用一之括号匹配问题

    括号匹配问题 给一个类似这样的字符串 char a abc 检测三种括号的左右括号是否匹配 分析 先取出一个字符 并判断是不是括号 任意括号 1 不是括号 取下一个字符 2 是括号 1 是左括号 压栈 2 是右括号 和栈顶元素比较 栈空 前
  • 教程:使用C#实现PDF文件和字节数组的相互转换

    字节数组有助于存储或传输数据 同样 PDF文件格式因其功能和兼容性而广受欢迎 可以使用C 语言将PDF文件转换为字节数组 也可以将字节数组转换为PDF文件 这可以帮助更有效地在数据库中存储和归档PDF文件 还可以通过使用字节数组来序列化数据
  • CMake中target_compile_definitions的使用

    CMake中的target compile definitions命令用于向target添加编译定义 其格式如下 target compile definitions
  • 什么是DDoS攻击?如何抵御DDos攻击?

    什么是DDoS攻击 如何抵御DDos攻击 单纯的土豆 2016 05 23 安全报道显示2015年DDoS攻击强度创下新纪录 那么DDoS到底是什么呢 了解一些 对产品经理与后台的同事沟通有好处 分布式拒绝服务 DDoS Distribut
  • mac 卸载 XCode

    1 卸载之前的XCode 命令行执行下面命令 sudo Developer Library uninstall devtools mode all sudo Developer Library uninstall developer fol
  • Springboot 集成 minio分享以及小坑 和 单机部署

    第一步先引入minio依赖
  • C#读取文本文件

    根据文件名到对应文件夹中读取对应文本文件 txt 并返回数据集合 使用流读取类StreamReader 一行一行读取 ReadLine 文本格式 public static List
  • 使用connect by进行级联查询

    connect by可以用于级联查询 常用于对具有树状结构的记录查询某一节点的所有子孙节点或所有祖辈节点 来看一个示例 现假设我们拥有一个菜单表t menu 其中只有三个字段 id name和parent id 它们是具有父子关系的 最顶级
  • Ubuntu22安装Redis

    Redis 是一个开源的在内存存储键值对数据的存储程序 它可以被用作数据库 缓存 信息暂存 并且支持各种数据结构 例如 字符串 哈希值 列表 集合等等 Redis 通过 Redis Sentinel 和 Redis 集群中多个 Redis
  • 解决谷歌人机验证(Captcha)显示问题

    文章目录 前言 一 Header Editor 下载 安装与配置 1 插件下载 2 插件安装 3 插件配置 前言 由于谷歌服务在国内不可用 所以正常访问时某些网址时 经常会出现需要人机验证的问题 影响正常使用 在不使用科学上网的情况下 我们
  • Web启动项目走Https协议(Webpack版,Umi版和Host代理版)

    需求 Web项目的启动 一般是默认的http协议 在某些业务需求时 需要走https来调试 Webpack版本 只需在webpack的devServer中配置就可以了 devServer host 0 0 0 0 port 8080 htt
  • html代码制作的个人简历源代码

  • python requests.get post

    get 方式 首先导入requests库 import requests 定义url url https baidu com 定义请求头 注意的是headers在真实环境中是有很多数据的 我们通过python传输这个数据就要以字典的方式来定
  • windows10系统提示不允许使用你正在尝试的登录方式,请联系网络管理员了解详细信息

    故障截图如图所示 排查方法 1 检查AD域用户账号登录到是否受限 2 在运行框中输入gpedit msc查看组策略 计算机配置 windows设置 本地配置 用户权限分配 拒绝本地登录 guest 参考是否与正常登录的用户电脑设置一致 允许
  • 使用ESP8266接入“天猫精灵”控制七彩灯(WS2812)的颜色/亮度-开源

    目录 演示视频 1 准备工作 1 1 原理 1 2 使用的硬件以及硬件连接图 1 3 开发环境准备 Arduino开发环境 安装ESP8266的扩展 安装blinker Arduino库 安装blinker APP 下载ws2812的驱动库