时间:2017年12月

阶段:大二上学期

背景:单片机原理与应用课设

名称:智能灯控

摘要

本系统实现了多方式控灯功能,有按键控灯、串口指令控灯、点对点无线射频控灯、AI模式控灯。其中AI模式控灯是通过红外模块感应外界是否有人靠近来控制灯的亮灭及通过光敏传感器模块感应外界光照强度进而动态调整PWM占空比的输出来控制灯的亮度。

物联网是新一代信息技术的重要组成部分,也是“信息化”时代的重要发展阶段。互联网是物联网个过渡,物联网将成为新时代的发展灵魂。

处于AI时代来临前的我深感可庆,传统的灯控需要大量的布线,若要实现双控、三控及多控更是需要加大用线量,且开关还需要特别定制,及其麻烦,对于远程控制更是不敢想象。

我们将要设计并打造出一款基于ZigBee模块,多传感器,多方式开关,远程智能控制的灯控系统,达到智能照明的节能、环保、舒适、方便的功能。

关键词  物联网;智能;控制;LED灯

前言

1.1 系统研究背景

传统的灯控需要大量的布线,若要实现双控、三控及多控更是需要加大用线量,且开关还需要特别定制,及其麻烦,对于远程控制更是不敢想象。

1.2 系统研究的意义和目的

设计并打造出一款基于ZigBee模块,多传感器,多方式开关,远程智能控制的灯控系统,达到智能照明的节能、环保、舒适、方便的功能。

系统概述

2.1 系统的结构

本系统有软件和硬件两部分组成。

软件部分:串口调试助手,控制灯的亮灭、打开和关闭AI模式和实时监测灯的变化情况和日志

硬件部分:两个ZigBee模块,其中控制模块可以控制灯的亮灭和打开和关闭AI模式,被控制模块有人体红外感应模块、光敏传感器和LED发光二极管,其本身按键S1可以控制灯的亮灭,S2按键可以控制AI模式的开和关。AI模式是通过红外感应模块和光敏传感器智能控灯。

图2.1  系统结构图

2.2  系统的功能

1)按键控灯:开发板按键S1可以控制灯的亮和灭;

2)串口控灯:串口调试助手可发1开灯,和0关灯,控制灯的亮和灭;

3)无线控灯:一对一无线控制灯的开关,安全,可靠,无线发送模块的按键S1为灯控按键;

4)AI模式控灯:智能灯控的核心,AI模式可以感应周围是否有人经过来控制灯的开和关,并且可以根据外界的光照强度来调节自身灯的亮度,达到了节能、环保、舒适的绝佳效果;

5)多方式AI模式开关:本系统提供多方式控制AI模式的开启和关闭,其方式有:按键S2、串口、无线发送模块按键S2;

6)实时信息:串口助手实时上报灯的亮灭情况和当前受到哪方面的控制,如无线开灯时,串口将会显示“----无线开灯成功-----”和“/////AI模式关闭/////”信息,以达到最佳安全级别。

2.3  开发环境

IAR Embedded Workbench微型处理器开发环境

硬件系统设计

3.1  Zigbee芯片 CC2530

ZigBee是基于IEEE802.15.4标准的低功耗局域网协议。根据国际标准规定,ZigBee技术是一种短距离、低功耗的无线通信技术。这一名称(又称紫蜂协议)来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息,也就是说蜜蜂依靠这样的方式构成了群体中的通信网络。其特点是近距离、低复杂度、自组织、低功耗、低数据速率。主要适合用于自动控制和远程控制领域,可以嵌入各种设备。简而言之,ZigBee就是一种便宜的,低功耗的近距离无线组网通讯技术。ZigBee是一种低速短距离传输的无线网络协议。ZigBee协议从下到上分别为物理层(PHY)、媒体访问控制层(MAC)、传输层(TL)、网络层(NWK)、应用层(APL)等。其中物理层和媒体访问控制层遵循IEEE 802.15.4标准的规定。

3.2  LED发光二极管

LED发光二极管采用的是2*5*7MM雾状白蓝色发光二极管,二极管的阳极接在ZigBee模块的P1_0引脚,阴极接ZigBee模块的GND引脚。

图3.1  LED发光二极管实物图

3.3 人体红外感应模块

人体红外感应模块采用的是完整版的HC-SR501人体模块,自动感应,红外感应模块的VCC接在ZigBee模块的5.0vVCC引脚,GND接在ZigBee模块的GND 引脚,out接在ZigBee模块的P1_3引脚。

           

图3.2      人体红外感应模块原理图             图3.3     人体红外感应模块实物图

3.4 光敏电阻传感器

光敏电阻传感器采用的是4线光敏电阻传感器模块,光敏电阻型号为:5516,本产品使用的是AO模拟量输出,光敏电阻传感器的VCC脚接在ZigBee模块的3.3vVCC引脚,GND接在ZigBee模块的GND引脚,AO接在ZigBee模块的P0_5引脚。

            

图3.4   光敏传感器模块原理图                    图 3.5  光敏传感器模块实物图

软件系统设计

4.1系统整体功能设计

ADC环境光照强度魔术转换;PWM多级调光;多中断智能处理;人体红外感应;无线远距离控制。

图4.1  程序流程图

4.2  AI模式

AI模式可以感应周围是否有人经过来控制灯的开和关,并且可以根据外界的光照强度来调节自身灯的亮度,达到了节能、环保、舒适的绝佳效果。

主函数while(1)循环里,if((boozd==1)&&(P1_3==1))(boozd为AI模式是否允许标志位,P1_3==1表示当前有人经过)成立则会不断获取当前ADC环境光照强度魔术转换后的值,然后用if(){}else if(){}方法与标准区间进行比较,若比较成功将会以当前区间所对应的LED亮度动态调整PWM占空比输出,然后将进行新判断、获取、比较。

图 4.2-1

如图 4.2-1,串口调试助手发送 2,收到 CC2530 串口发送的的信息,此时红外人体感应模块和光敏传感器模块两者协调工作,共同控制 LED 灯,也可以通过接收 CC2530 单片机的按键模块的 S2 按键来打开和关闭 AI 模式,也可通过发送CC2530 单片机的按键 S2 来控制 AI 模式的启动与关闭;

图 4.2-2

如图 4.2-2,系统处于 AI 模式时用手握紧光敏传感器模块,让光敏传感器模块处于黑暗的环境下,可见 LED 灯的亮度

图 4.2-3

如图 4.2-3,系统处于 AI 模式时,打开手机闪光灯靠近光敏传感器模块,可见LED 灯的亮度明显降低,当闪光灯更加接近光敏传感器模块时,LED 灯会熄灭

4.3 多中断智能处理

本系统包含3大中断处理函数:

1》》串口接收中断处理函数:

#pragma vector=URX0_VECTOR

__interrupt void urx0(){}

可判断串口接收到的数据,然后进行智能处理,当接收到‘1’时,会以最大亮开灯和关闭AI模式,并且向串口调试助手发送“---串口开灯成功-----”和“----AI模式关闭-----”日志,当收到‘0’时,将向串口发送“/////串口关灯成功////”日志;当收到‘2’时,模块将会利用标志位判断AI模式是否打开,若打开则进行关闭操作,并向串口发送“----AI模式打开-----”日志;当收到其他数据时,模块将向串口将会发送“!!!无该指令!!!”日志。

图 4.3-1
如图 4.3-1,串口调试助手发送‘1’,LED 灯会以全亮的形式打开,并关闭AI模式

图 4.3-2

如图 4.3-2,串口调试助手发送‘0’,LED 灯熄灭 (2 按键中断处理函数:

#pragma vector=P0INT_VECTOR
__interrupt void p0int(){}
模块按键有 S1 和 S2,分别对应的是 ZigBee 模块的 P0_0 和 P0_1 引脚,S1可以控制灯的亮灭,当按键按下且 if(P0IFG&0x01)成立则表示可进入 S1 中断处理函数,函数里将根据标志位状态进行下一步操作,若标志位显示此时灯是灭的,则将会进行开灯功能,并向串口发送相应日志;S2 可以控制 AI 模式的开和关,当按按下且 if(P0IFG&0x02)成立将进入 S2 中断处理函数,函数里将根据标志位状态进行下一步操作,若标志位显示此时 AI 模式已开启,则会进行关闭 AI 模式操作,并先串口发送相应日志。

图 4.3-3
如图 4.3-3,当按下接收 CC2530 单片机的按键模块的 S2 按键,串口调
试助手收到单片机发来的 AI 模式打开的信息,此时 AI 模式正在运行中。

图 4.3-4
如图 4.3-4,当再次按下接收 CC2530 单片机的按键模块的 S2 按键,串口调试助手收到单片机发来的 AI 模式关闭信息,此时 LED 灯熄灭

图 4.3-5
如图 4.3-5,当按下接收 CC2530 单片机的按键模块的 S1 按键,串口调试
助手收到单片机发来的按键开灯成功和 AI 模式关闭信息,此时 LED 最亮显示

图 4.3-6
如图 4.3-6,当再次按下接收 CC2530 单片机的按键模块的 S1 按键,串口调试助手收到单片机发来的 LED 关闭信息,此时 LED 灯熄灭
3》》RF 中断处理函数

#pragma vector=RF_VECTOR __interrupt void x1(){}

当 ZigBee 模式收到发送模块数据时且 if(RFIRQF0 & 0x40)成立将进入 RF接收处理函数,读取数据包的倒数第 4 和第 3 个有效字节,倒数第 3 位数据对应串口发送‘2’的功能,倒数第 4 位数据对应的是串口发送‘1’的功能

图 4.3-7

如图 4.3-7,当发送 CC2530 单片机模块按下 S1 按键时 ,接受 CC2530 将会进入 RF 中断,并收到“0x0D,0x51,0x88,0x00, 0x07,0x20,0xEF,0xBE,0x20, 0x50,'1','0'” 数据包,经过解析可知是控制灯的亮灭指令,接受单片机模块执行开灯和关闭 AI 模式

图 4.3-8

如图 4.3-8,当发送 CC2530 单片机模块再次按下 S1 按键时 ,接受CC2530 将会再次进入 RF 中断,并再次接收到“0x0D,0x51,0x88,0x00, 0x07,0x20,0xEF,0xBE,0x20, 0x50,'1','0'” 数据包,经过解析可知是控制灯的亮灭指令,接受单片机模块执行关灯操作

图 4.3-9

如图 4.3-9,当发送 CC2530 单片机模块按下 S2 按键时 ,接受 CC2530 将会进入RF 中断,并收到“0x0D,0x51,0x88,0x00,0x07,0x20,0xEF,0xBE,0x20, 0x50,'0','2'” 数据包,经过解析可知是控制 AI 模式的启动与停止指令,接受单片机判断此时 AI 模式是否开启然后继续相反操作。

图 4.3-10

如图 4.3-10,当发送 CC2530 单片机模块再次按下 S2 按键时 ,接受 CC2530将会再次进入 RF 中断,并收到“0x0D,0x51,0x88,0x00,0x07,0x20,0xEF, 0xBE,0x20,0x50,'0','2'” 数据包,经过解析可知是控制 AI 模式的启动与停止指令,接受单片机判断此时 AI 模式是否开启然后进行相反操作。

系统调试

5.1. 系统硬件调试
单个功能一一测试完成后,发现 ZigBee 模块仅有一个 GND 引脚,所以把全
部传感器、二极管等的 GND 引脚一起用 1 根杜邦线引入 ZigBee 模块的 GND 引脚。

5.1 硬件总体实物图

5.2. 系统软件调试
如何更加准确的知道当前环境的光照情况,明暗变化的光照强度 ADC 变化,可以通过:

char str[30];
sprintf(str,"adc 数值为:%d",adc);
uartTX_Send(str);
在主函数实时发送 ADC 的值到串口调试助手里,获取每个光照阶段里 ADC转换的值,计算 PWM 占空比以达到最佳的调光效果。

相关部分代码

RF收

 #include<iocc2530.h>
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
#define LED P1_1
#define uint unsigned int
bool boozd=;
bool boog=;
uint pwmx[]={0x00,0xF7,0xE1,0xC8,0xAF,0x96,0x7D,0x64,0x4B,0x32,0x01};
uint adc;
float adcResu;
void InitLED(){//*****************初始化LED灯
P1SEL &=0xFD;
P1DIR |=0x02;
LED=;
}
void InitADC(){//********************初始化ADC
P0DIR &=0xDF;//P0_5为输入
APCFG |=0x20;//设置为模拟口
ADCCON3 =0x75;//0011 0101,端口电压,512抽取率,P0_5
adc=;
ADCH=;
ADCL=;//清除ADC数据
ADCCON1=0x30;//停止ADC转换
ADCCON1 |=0x40;//启动ADC转换
}
void Initclock()//*************************************时钟初始化
{//32MHz
SLEEPCMD &=0xFB;//开启全部RC振荡器,避免16MHZRC振荡器被关闭
while((SLEEPSTA&0x40)==);//等待32MHZ上电稳定
CLKCONCMD &=0xBF;//设置32MHZ为系统时钟源
while(CLKCONSTA&0x40);//等待32MHZ成功成为系统时钟源
CLKCONCMD |=0x38;
CLKCONCMD &=0xF8;//系统时钟不分频输出,定时器为250KHZ
SLEEPCMD |=0x04;//关闭不用的RC振荡器
} void InitUart(){//*******************************串口初始化
PERCFG &=0xFE;//将串口0的位置选在P0口
P2DIR &=0x3F; //P0口的外设优先级控制设为串口0优先
P0SEL |=0x0C;//P0口的2、3管脚设为外设工作方式
U0CSR |=0xC0;//USART0工作的UART模式,接收使能
U0UCR=0x02;//据格式为8位数据位、1位停止位、没有校验位
U0GCR |=;//波特率为115200
U0BAUD |=;
EA=;
URX0IE=;//接收中断打开
UTX0IF=;
URX0IF=;
}
void delay(uint i){//*********************延时函数
for(uint j=;j<i;j++)
for(uint x=;x<;x++);
}
void uartTX_Send(char *strx){//********************串口发送
while(*strx!='\0'){
U0DBUF=*strx;
while((U0CSR&0x02)==);//等待发送完成
*strx++;
U0CSR &=0xFD;
}
}
void InitTime(){//**********************pwm
//输出比较,P1_0
P1SEL |=0x01;
P1DIR &=0xEE;
PERCFG |=0x40;
P2DIR |=0xC0;//定时器通道2-3最高优先级
T1CTL=0x02;//模模式,0x00-T1CC0!!!!!!!!!!!!!!!!
T1CCTL2=0x1C;
T1CC0H=0x00;
T1CC0L=0xFA;//周期为1ms,频率为1KHZ 必须设置!!!!
T1CC2H=0x00;
T1CC2L=pwmx[];
//0x00 0xF7 0xE1 0xC8 0xAF 0x96 0x7D 0x64 0x4B 0x32 0x19
}
void InitButton(){//*******************按键中断初始化
P0SEL &=0xFC;
P0DIR &=0xFC;
P0INP &=0xFC;
P2INP &=0xFC;
PICTL |=0x01;
P0IE=;
P0IEN |=0x03;
P0IF=;
P0IFG &=0xFC;
}
void Initho(){//******************************红外感应初始化
//P1_3
P1SEL &=0xF7;
P1DIR &=0xF7;
P1INP &=0xF7;
P2INP |=0x40;
}
void InitWX()//***********************************射频的初始化
{
FRMCTRL0 |=0x60;
TXFILTCFG =0x09;
AGCCTRL1 =0x15;
FSCAL1=0x00; RFIRQM0 |=0x40;//打开接收中断
IEN2 |=0x01;
FREQCTRL=(+(-)*);// 25号信道可改设置载波为2475M PAN_ID0=0x07;
PAN_ID1=0x20;//PAMID RFST=0xEC;//清除接收缓冲器
RFST=0xE3;//开启接收使能 SHORT_ADDR0=0xEF;
SHORT_ADDR1=0xBE;//设置模块网络地址
}
void main(){
InitLED();
Initclock();
InitUart();
InitADC();
InitTime();
InitButton();
Initho();
InitWX();
boozd=;
boog=;
while(){
if(ADCCON1&0x80){
adc |=(ADCL>>);
adc |=(ADCH<<);
if((boozd==)&&(P1_3==)){
LED=;
if(adc>){T1CC2H=0x00;T1CC2L=pwmx[];}
else if(adc>){T1CC2H=0x00;T1CC2L=pwmx[];}
else if(adc>){T1CC2H=0x00;T1CC2L=pwmx[];}
else if(adc>){T1CC2H=0x00;T1CC2L=pwmx[];}
else if(adc>){T1CC2H=0x00;T1CC2L=pwmx[];}
if(adc<){T1CC2H=0x00;T1CC2L=pwmx[];}
/* char str[30];
sprintf(str,"adc数值为:%d",adc);
uartTX_Send(str);*/
}else if(boog){
LED=;
T1CC2H=0x00;
T1CC2L=pwmx[];
}
InitADC();//再次启动
delay(); }
}
}
#pragma vector=URX0_VECTOR
__interrupt void urx0(){ //*******************串口中断处理函数 char bufch1;
bufch1=U0DBUF;
if(bufch1=='')
{boog=;
T1CC2H=0x00;
T1CC2L=pwmx[];
boozd=;
LED=;
uartTX_Send("\r\n ----串口开灯成功----- \r\n");
uartTX_Send("\r\n ----AI模式关闭----- \r\n");
}
else if(bufch1=='')
{boog=;
boozd=;
LED=;
T1CC2H=0x00;
T1CC2L=pwmx[];
uartTX_Send("\r\n /////串口关灯成功//// \r\n");
}
else if(bufch1==''){
boog=;
LED=;
boozd=;
uartTX_Send("\r\n ----AI模式打开----- \r\n");
}
else
uartTX_Send("\r\n !!!无该指令!!! \r\n"); }
#pragma vector=P0INT_VECTOR//**************按键中断处理函数
__interrupt void p0int(){
if(P0IFG&0x01){
delay();
if(P0_0==){
boog=;
if(LED==){
LED=;
boozd=;
T1CC2H=0x00;
T1CC2L=pwmx[];
uartTX_Send("\r\n /////按键关灯成功//// \r\n"); }else{
LED=;
boozd=;
uartTX_Send("\r\n ----按键开灯成功----- \r\n");
uartTX_Send("\r\n /////AI模式关闭///// \r\n");
T1CC2H=0x00;
T1CC2L=pwmx[];
}
}
}
if(P0IFG&0x02){
delay();
if(P0_1==){
boog=;
if(boozd==){
boozd=;
LED=;
uartTX_Send("\r\n ----AI模式打开----- \r\n");
}else{
boozd=;
LED=;
uartTX_Send("\r\n /////AI模式关闭///// \r\n");
}
}
}
P0IF=;
P0IFG &=0xFC;
}
#pragma vector=RF_VECTOR//******************RF中断处理函数
__interrupt void x1()
{
if(RFIRQF0 & 0x40){ static int len;
static char ch;
len=ch=;
len=RFD; //第一个字节
while(len>){
ch=RFD;
if(len==){
if(ch==''){
boog=;
if(LED==){
LED=;
boozd=;
T1CC2H=0x00;
T1CC2L=pwmx[];
uartTX_Send("\r\n /////无线关灯成功//// \r\n"); }else{
LED=;
boozd=;
uartTX_Send("\r\n ----无线开灯成功----- \r\n");
uartTX_Send("\r\n /////AI模式关闭///// \r\n");
T1CC2H=0x00;
T1CC2L=pwmx[];
}}}
if(len==){
if(ch==''){
boog=;
if(boozd==){
boozd=;
LED=;
uartTX_Send("\r\n ----AI模式打开----- \r\n");
}else{
boozd=;
LED=;
uartTX_Send("\r\n /////AI模式关闭///// \r\n");
}}}
len--;
}
RFIRQF0 &=~0x40;
S1CON=;
RFST =0xEC;
RFST=0xE3;
}}

RF发

 #include<iocc2530.h>
void Initwx()//********************************射频的初始化
{
EA=;
FRMCTRL0 |=0x60;
TXFILTCFG =0x09;
AGCCTRL1 =0x15;
FSCAL1=0x00; RFIRQM0 |=0x40;//打开射频接收中断,应该在下面写接收中断函数
IEN2 |=0x01;//RFIE中断开
FREQCTRL=(+(-)*);//设置信道为25则载波为2475M PAN_ID0=0x07;//////PANID
PAN_ID1=0x20;//0x2007 RFST=0xEC;//清除接收缓冲器
RFST=0xE3;//开启接收使能
EA=;
}
void fa( char *fsj,int len){//************************发送函数
RFST=0xEC;//确保接收是空
RFST=0xE3;//清接收标志位
while(FSMSTAT1 & 0x22);//等待射频发送准备好
RFST =0xEE;//确保发送队列为空
RFIRQF1 &=~0x02;//清空发送标志位
for(int i=;i<len;i++){
RFD=fsj[i];}
RFST=0xE9;//发送缓冲区的数据 while(!(RFIRQF1 & 0x02));//等待发送完成
RFIRQF1=~0x02;//清发送完成标志
} void delay(){//*****************延时函数
for(int i=;i<;i++)
for(int j=;j<;j++);
}
void go32m()//*************************时钟频率初始化
{
SLEEPCMD &=0xFB;//开启全部RC振荡器,避免16MHZRC振荡器被关闭
while((SLEEPSTA&0x40)==);//等待32MHZ上电稳定
CLKCONCMD &=0xBF;//设置32MHZ为系统时钟源
while(CLKCONSTA&0x40);//等待32MHZ成功成为系统时钟源
CLKCONCMD |=0x38;
CLKCONCMD &=0xF8;//系统时钟不分频输出,定时器为250KHZ
SLEEPCMD |=0x04;//关闭不用的RC振荡器
}
void InitButton()//**************************
{
P0SEL &=0xFC;
P0DIR &=0xFC;
P0INP &=0xFC;
P2INP &=0xFC;
PICTL |=0x01;
P0IE=;
P0IEN |=0x03;
P0IF=;
P0IFG &=0xFC;
}
void InitLED(){//***************************************
P1SEL &=0xFC;
P1DIR |=0x03;
P1_0=;
P1_1=; }
void main(){
InitLED();
go32m();
InitButton();
Initwx();
SHORT_ADDR0=0x50;
SHORT_ADDR1=0x20;//设置模块网络地址为0x2050;
while();
}
#pragma vector=P0INT_VECTOR
__interrupt void xx()
{
if(P0IFG&0x01){
delay();
if(P0_0==){ P1_0=~P1_0;
char fsj[]={0x0D,0x51,0x88,0x00,0x07,0x20,0xEF,0xBE,0x20,0x50,'',''};
fa(fsj,); //发送函数
}
}
if(P0IFG&0x02){
delay();
if(P0_1==){ P1_0=~P1_0;
char fsj[]={0x0D,0x51,0x88,0x00,0x07,0x20,0xEF,0xBE,0x20,0x50,'',''};
fa(fsj,); //发送函数
}
}
P0IF=;
P0IFG &=0xFC;}

智能灯控(基于ZigBee)的更多相关文章

  1. 信驰达携“Zigbee Light Link灯控方案”亮相第18届广州国际照明展

    2013年6月9日至12日,第18届广州国际照明展览会在琶洲中国进出口商品交易会展馆举行,作为全球照明及LED行业风向标和晴雨表,本次展会吸引了来自27个国际及地区,共2600多家企业参展.我公司受T ...

  2. 基于ZigBee和STM32的智能家居控制系统的设计与实现(三)

    基于ZigBee和STM32的智能家居控制系统的设计与实现(三) 自从前两篇博客介绍了智能家居系统的基本实现机理后,收到了好多朋友的来信,和我讨论了好多的这方面的知识,在此很高兴,虽然自己做的这个所谓 ...

  3. 基于ZigBee的家居控制系统的设计与应用

    基于ZigBee的家居控制系统的设计与应用 PPT简介:http://pan.baidu.com/s/1i38PC6D 摘  要 智能家居是未来家居的发展方向,其利用先进的网络技术.计算机技术和无线通 ...

  4. 蓝牙4.0LED灯控方案

    一.LED照明机遇 相对传统光源产品,LED灯凭借其光效高.寿命长.不含汞.总拥有成本低等优势,已被普遍认为是一种革命性和替代性的技术.随着全球白炽灯禁产.禁用政策的依次落实,白炽灯将逐渐消失于市场. ...

  5. jquery的智能提示控件

    福利到~分享一个基于jquery的智能提示控件intellSeach.js   一.需求 我们经常会遇到[站内搜索]的需求,为了提高用户体验,我们希望能做到像百度那样的即时智能提示.例如:某公司人事管 ...

  6. 玩转OneNET物联网平台之MQTT服务⑤ —— OneNet智能灯+MVP框架

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  7. WiFi-ESP8266入门http(3-4)网页一键配网(1若为普通wifi直连 2若为西电网页认证自动网页post请求连接)+网页按钮灯控+MQTT通信

    网页一键配网(1若为普通wifi直连  2若为西电网页认证自动网页post请求连接)+网页按钮灯控+MQTT通信 工程连接:https://github.com/Dongvdong/ESP8266_H ...

  8. Diy智能家居-1.基于esp8266的语音控制系统(开篇)

    目录Diy智能家居-1.基于esp8266的语音控制系统(开篇) https://blog.csdn.net/arno1988/article/details/82628589 Diy智能家居-2.基 ...

  9. 智能家居-3.基于esp8266的语音控制系统(软件篇)

    智能家居-1.基于esp8266的语音控制系统(开篇) 智能家居-2.基于esp8266的语音控制系统(硬件篇) 智能家居-3.基于esp8266的语音控制系统(软件篇) 赞赏支持 QQ:505645 ...

随机推荐

  1. spring boot datasource 参数设置

    datasource spring.dao.exceptiontranslation.enabled是否开启PersistenceExceptionTranslationPostProcessor,默 ...

  2. CentOS 7.6出现SSH登录失败的解决方法

    CentOS 7.6出现SSH登录失败的解决方案 问题重现: iterm登录 ssh vagrant@192.168.10.10 The authenticity of host '192.168.1 ...

  3. Codeforces Round #557 (Div. 1)

    A.直接做. #include<vector> #include<cstdio> #include<cstring> #include<iostream> ...

  4. 表单送件按钮代码(一)cs(C#)(未完)

    protected void BtnRequest_Clich(object sender, EventArgs e) { lblMsg.Text= " " ; lblfmsg.T ...

  5. .net mvc 迁移到 .netcore

    迁移的时候发现,ef6 不能添加 到  .NET Standard2  的类库,因为不兼容, 6 以上的版本只能用于  .net 4.5 以上 只能用别的

  6. 关于Git无法提交 index.lock的解决办法

    今天提交代码时,在一次提交,莫名其妙没成功后,再次用git commit -a命令时,出现以下错误,无论是用git还是TortoiseGit都会出现以下这个问题.. $ git commit -a f ...

  7. 关于Vue-ElementUI修改默认样式不成功问题解决

    Element是一个很好用的组件库,但是有时候我们需要修改一些组件的样式以满足我们自己的需求. 我们用浏览器调试找到相应的class,在本地重写这个class时,发现修改不成功. 这是因为在Vue文件 ...

  8. python 循环结构(for-in)

    循环结构(for-in) 说明:也是循环结构的一种,经常用于遍历字符串.列表,元组,字典等 格式: for x in y: 循环体 执行流程:x依次表示y中的一个元素,遍历完所有元素循环结束 示例1: ...

  9. 互联网项目中mysql推荐(读已提交RC)的事务隔离级别

    [原创]互联网项目中mysql应该选什么事务隔离级别 Mysql为什么不和Oracle一样使用RC,而用RR 使用RC的原因 这个是有历史原因的,当然要从我们的主从复制开始讲起了!主从复制,是基于什么 ...

  10. Vue-filter指令全局过滤和稀有过滤

    简单介绍一下过滤器,顾名思义,过滤就是一个数据经过了这个过滤之后出来另一样东西,可以是从中取得你想要的,或者给那个数据添加点什么装饰,那么过滤器则是过滤的工具.例如,从['abc','abd','ad ...