用stc89c52rc芯片与esp8266的结合,控制三色LED彩灯的颜色变化和亮度变化,可以实现用手机app远程控制。
1.首先要明确下,如果是要完整的电路图和代码,不经过自己思考,那应该是比较难达到目的。
2.如果是要求一个方案、思路,那就好办。
第一步,确认ESP8266是指8个脚的板子,还是小系统板?
如果是第1个,操作起来会麻烦。
你可以先把OneNet串口固件烧录到8266模块里,然后就可以通过串口数据发送到51单片机。但是这个方案没有比较好用的APP,OneNet可以用大屏显示来实现,另外,不确定STC89C52这个单片机能不能实现3色灯的控制。
如果是二个,搜索blinker和blynk,有很详细的教程实现APP控制led三色灯,APP都是免费的。
如果是第三个,只要画图做个底板就可以和单片机串口连接,操作方法同第二个。
结论:
可以不用单片机的话执行第二个的方案。
一定要单片机并且只能STC89C52的话,ESP8266建议换ESP32,把单片机接 ESP32串口2上面,非常好解决问题,因为接入云平台以后会有很多log数据下发到串口,干扰你对RGB灯颜色的控制,你可以编程使用ESP32的串口2发送颜色数据。
以下几个关键词多搜索一下自然有答案了。
Blynk、 8266、 ESP32、Blinker、OneNet串口固件
是控制三个三个led灯还是灯条,这两个的控制方式是完全不一样的。如果是三个led灯,只需要at指令让stc的片子输出对应的pwm就行了。如果是灯条,则需要在收到命令后对灯条的ic进行通信。
这个需求只用esp8266就能做到,没必要再用51了
确实,还不如直接用esp8266或者esp32……….用
51+8266也行我之前做的是stm32+8266+onenet平台的(有app和网页可以控制)stm32的需要不?
stc89c52rc芯片与8051芯片完全兼容,用8051芯片控制三色彩灯的电路图太多了,只需把8051换成stc89c52rc即可(D0-D7)共8个针脚可以编程传输数据,一个三色灯用三个针脚和一个接地线。
esp8266与stc89c52rc关联
只需将 stc89c52rc 的 TX/RX 连接到 esp8266 的 RX/TX 并在汇编/C 中编写代码,即可根据需要将数据传输到 Esp8266 模块。并且波特率可以比默认的 115200bps 高很多。
注意事项,esp8266电压是 3.3V
下面是相关应用
把51替换成stc89c52rc即可
https://blog.csdn.net/qq_41984175/article/details/104566513
https://blog.csdn.net/Dreamcatcher_yxc/article/details/106905505
https://m.elecfans.com/article/574618.html
下面这个链接是答案,望采纳
http://www.360doc.com/content/19/1229/23/12109864_883011992.shtml
/*******************************************
ESP8266控制
**********************************************/
#ifndef __ESP8266_H_
#define __ESP8266_H_
#include "uart.h"
#include "Delay.h"
char code TSD[]="AT+CIPSEND=0,10\r\n", //向0号机发送10字节数据
restart[]="AT+RST\r\n" , //重启
Model_1[]="AT+CWMODE=1\r\n", //模式1 Station模式
Model_2[]="AT+CWMODE=2\r\n", //模式2 AP模式
Model_3[]="AT+CWMODE=3\r\n", //模式3 AP兼Station模式
SMC[]="AT+CIPMUX=1\r\n", //启动多连接
SSC[]="AT+CIPMUX=0\r\n", //启动单连接
ESM[]="AT+CIPSERVER=1,8080\r\n", //开启服务器模式
send[]="AT+CIPSEND=", //发送数据
terminator[]="\r\n", //结束换行符
link_server[]="AT+CIPSTART=\"TCP\"\,\"",//连接到服务器
Link_WIFI[]="AT+CWJAP=\"",
TCP_DisconnectMode[]="AT+CIPCLOSEMODE=0",
TCP_Disconnect[]="AT+CIPCLOSE";
void UartSendStr(char *P)
{
while(*P)
{
UartSend(*P++);
}
}
void InitEsp8266() //ESP8266初始化
{
Delayms(2000);
UartSendStr(SMC);
Delayms(500);
UartSendStr(ESM);
}
void ESP8266Send(unsigned char *p)
{
unsigned char buf[10];
buf[0] = '0';
buf[1] = ',';
buf[2] = (strlen(p)/10)+0x30;
buf[3] = (strlen(p)%10)+0x30;
UartSendStr(send);
UartSendStr(buf);
UartSendStr(terminator);
Delayms(100);
UartSendStr(p);
UartSendStr(terminator);
}
#endif
CSDN真的是各路大神,懂啥的都有
关注一下,要考的