8266实用遥控器-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3001|回复: 6

8266实用遥控器

[复制链接]
发表于 2021-9-10 18:02 | 显示全部楼层 |阅读模式
本帖最后由 lwq1947 于 2021-9-10 20:24 编辑

  参看网上关于8266通讯方面的相关资料,我制作了一款8266实用遥控器.无需网络就能使用.一块由ESP-12E为主的电路构成了发送器,接收器则选用了成品ESP-01S了继电器模块.根据个人需求只设计了一路开关控制(如有需要可自行更改程序来实现多路控制).
  由于9266处于通讯状态时其工作电流较大,约为50-70毫安.为了降低遥控器待机电流,所以设计电路使得8266的EN端平时为低电平处于休眠状态.实测待机电流为250微安.当开关键任何一个按下时还会通过二级管使的8266的EN端立刻变为高电平以唤醒8266执行开关程序(延迟约2毫秒).遥控器电源选用了报废数码相机的锂电池.由于8266的工作电压范围为3-3.6伏,所以在锂电池充电回路中串接了一只二级管.这样就使的电池充电终止电压变为3.6V.确保8266能安全工作.程序设计中还使用了A0口对电池电压进行监测:当电池电压低于3V时,在按压开关键后红色的LED指示灯就会变为闪亮.提示需要给锂电池充电了.
  遥控器电路图和程序及ESP-01S程序如下,供大家参考.
发送程序:
#include <ESP8266WiFi.h>
#include <espnow.h>
uint8_t broadcastAddress[] = {0x9C, 0x9C, 0x1F, 0x46, 0x58, 0x9C};//接收器8266的MAC地址 根据自己的板子修改.获取方法参见:https://blog.csdn.net/weixin_45631738/article/details/113139247
typedef struct struct_message {
  char a[32];
  int b;

} struct_message;

struct_message myData;

void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
  Serial.print("Last Packet Send Status: ");
  if (sendStatus == 0){
    Serial.println("Delivery success");
  }
  else{
    Serial.println("Delivery fail");
  }
}

void setup() {

  Serial.begin(115200);

  WiFi.mode(WIFI_STA);

  if (esp_now_init() != 0) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }
pinMode(4,INPUT);
pinMode(5,INPUT);

  esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);

  esp_now_register_send_cb(OnDataSent);

  esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
}

void loop() {

if(digitalRead(4)==LOW) myData.b = 1;
if(digitalRead(5)==LOW) myData.b = 2;

  esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));

  delay(1000);
}

接收程序:
#include <ESP8266WiFi.h>
#include <espnow.h>
int k;

typedef struct struct_message {
    char a[32];
    int b;
} struct_message;

struct_message myData;

void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) {
  memcpy(&myData, incomingData, sizeof(myData));

  Serial.print("Int: ");
  k=myData.b;
  Serial.println(myData.b);

  Serial.println();
}

void setup() {

  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  if (esp_now_init() != 0) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }
  pinMode(0,OUTPUT);
digitalWrite(0, LOW);
pinMode(2,OUTPUT);
digitalWrite(2, LOW);

  esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
  esp_now_register_recv_cb(OnDataRecv);
}

void loop(){
if(k==1)  {
digitalWrite(0, LOW);  
digitalWrite(2, LOW);
}
if(k==2) {
digitalWrite(0, HIGH);
digitalWrite(2, HIGH);
}
}



电路图

电路图

外观图

外观图
发表于 2021-10-3 15:39 | 显示全部楼层
请问遥控器也可以ESP-01S吗?
 楼主| 发表于 2021-10-4 05:32 | 显示全部楼层
tnn0220 发表于 2021-10-3 15:39
请问遥控器也可以ESP-01S吗?

可以的,只要将GPIO4和GPIO5换成GPIO0和GPIO2,但要改为输入上拉,两按键公共端接GND,同时增加一个三极管反向器来控制EN端.
发表于 2021-10-4 19:16 | 显示全部楼层
lwq1947 发表于 2021-10-4 05:32
可以的,只要将GPIO4和GPIO5换成GPIO0和GPIO2,但要改为输入上拉,两按键公共端接GND,同时增加一个三极管反 ...

明白了谢谢.
发表于 2022-4-4 09:49 | 显示全部楼层
我用的是esp-12f的板子,电路哪里需要修改一下,没有en口
 楼主| 发表于 2022-4-5 06:30 | 显示全部楼层
guokekohy 发表于 2022-4-4 09:49
我用的是esp-12f的板子,电路哪里需要修改一下,没有en口

en口就是CH_PD脚。电路无需修改。
发表于 2022-7-9 11:53 来自手机 | 显示全部楼层
guokekohy 发表于 2022-4-4 09:49
我用的是esp-12f的板子,电路哪里需要修改一下,没有en口

3脚就是
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 10:38 , Processed in 0.110882 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表