一个简单的HDMI切换器改造

我的HDMI购买地址买了一个5路带红外遥控的


摘掉原有的5个led灯,晚上太亮瞎眼(主要是分压不亮了,我又不会处理 :joy:)正极接在我们的小板子上,负极不用管,整个板子的GND都是相通的。
EDA打开,新建工程HDMI.json (120.6 KB) :laughing: 板子问题有很多,毕竟我已经打完了就不改了 :sunglasses:
问题1 :红外发射头用的tx脚,这个烧录的时候就会出现问题了,可以做一个跳帽,用的时候帽上,刷机的时候摘下来;
问题2 :空间有点小最后盖上中间会翘起来,光耦应该放在底层。
问题3:这个红外外接的时候要注意线别焊错地方了,要不然没电压 :sunglasses:
还有这个红外接收头可以更美观的处理下

还有很多小问题 啥电阻电容啊都不会加 :neutral_face:毕竟我是菜鸟一只。

本来用的esphome结果红外有问题解决不了,又学了学arduino :eyes:
红外码请用这个获取IRrecvDumpV2.zip (3.1 KB) 打开串口调试,按下遥控按钮就会看到红外image 记下,等会写在arduino里

#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char* ssid = "@PHICOMM_CD";                     //WiFi账号
const char* password = "12345678";                 //WiFi密码
const char* mqtt_server = "192.168.123.233";          //mqtt地址
const char* mqtt_user = "mqtt";                       //mqtt账号
const char* mqtt_password = "mqtt";               //mqtt密码
const char* TOPIC = "hdmi/cmnd";
const char* TOPIC_state = "hdmi/state";
const char* client_id = "clientId-DF1tgy9Dh";        //标识当前设备的客户端编号

WiFiClient espClient;
PubSubClient client(espClient);

long lastMsg = 0;

int mac_pin = 4;                                   // 苹果电脑io
int sys_pin = 5;                                   // 群晖io
int tv_pin = 12;                                   //电视盒子io
int atv_pin = 13;                                   // 苹果盒子io
int n1_pin = 14;                                   // N1_haio

const uint16_t kIrLed = 3;                         //红外发射io

IRsend irsend(kIrLed);

void setup() {
  pinMode(mac_pin, INPUT);
  pinMode(sys_pin, INPUT);
  pinMode(tv_pin, INPUT);
  pinMode(atv_pin, INPUT);
  pinMode(n1_pin, INPUT);
  setup_wifi();
  WiFi.mode(WIFI_STA);
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
  irsend.begin();
}
void setup_wifi() {
  delay(10);
  WiFi.begin(ssid, password);
}
void reconnect() {
  while (!client.connected()) {
if (client.connect(client_id, mqtt_user, mqtt_password)) {
  client.subscribe(TOPIC);
} else {
  delay(5000);
}
  }
}

void callback(char* topic, byte* payload, unsigned int length) {       //读取mqtt消息做出判断
  payload[length] = '\0';

  if (String((char*)payload) == "1") {
irsend.sendNEC(0x1FEA05F);                               //这里是你学到的红外码
client.publish(TOPIC_state, "N1服务器");
  } else if (String((char*)payload) == "2"){
irsend.sendNEC(0x1FEE01F);                               //这里是你学到的红外码
client.publish(TOPIC_state, "电视盒子");
  } else if (String((char*)payload) == "3"){
irsend.sendNEC(0x1FE10EF);                               //这里是你学到的红外码
client.publish(TOPIC_state, "Apple TV");
  } else if (String((char*)payload) == "4"){
irsend.sendNEC(0x1FE906F);                               //这里是你学到的红外码
client.publish(TOPIC_state, "群晖");
  } else if (String((char*)payload) == "5"){
irsend.sendNEC(0x1FED827);                               //这里是你学到的红外码
client.publish(TOPIC_state, "MAC BOOK");
  }
}

void loop() {
  if (!client.connected()) {
reconnect();
  }
  client.loop();
long now = millis(); 
  if (now - lastMsg > 3000) {                               //用作反馈状态用 默认3s,自行修改
lastMsg = now;
  int va = digitalRead(mac_pin);
  if(va == LOW){
    client.publish(TOPIC_state, "MAC BOOK");
  }
  int vb = digitalRead(sys_pin);
  if(vb == LOW){
    client.publish(TOPIC_state, "群晖");
  }
  int vc = digitalRead(tv_pin);
  if(vc == LOW){
    client.publish(TOPIC_state, "电视盒子");
  }
  int vd = digitalRead(atv_pin);
  if(vd == LOW){
    client.publish(TOPIC_state, "Apple TV");
  }
  int ve = digitalRead(n1_pin);
  if(ve == LOW){
    client.publish(TOPIC_state, "N1服务器");
  }
  }
}

代码over
然后是nr的控制流 over :rooster: :chicken:

[
    {
        "id": "1b55fbc9.098694",
        "type": "ui_dropdown",
        "z": "f1b7e2b9.bfea2",
        "name": "",
        "label": "",
        "tooltip": "",
        "place": "切换",
        "group": "44264aa6.af1954",
        "order": 6,
        "width": 0,
        "height": 0,
        "passthru": false,
        "multiple": false,
        "options": [
            {
                "label": "MAC BOOK",
                "value": "MAC BOOK",
                "type": "str"
            },
            {
                "label": "群晖",
                "value": "群晖",
                "type": "str"
            },
            {
                "label": "电视盒子",
                "value": "电视盒子",
                "type": "str"
            },
            {
                "label": "Apple TV",
                "value": "Apple TV",
                "type": "str"
            },
            {
                "label": "N1服务器",
                "value": "N1服务器",
                "type": "str"
            }
        ],
        "payload": "",
        "topic": "",
        "x": 300,
        "y": 1580,
        "wires": [
            [
                "af67fcf0.e0771"
            ]
        ]
    },
    {
        "id": "9366df3.dbccd2",
        "type": "mqtt out",
        "z": "f1b7e2b9.bfea2",
        "name": "",
        "topic": "hdmi/cmnd",
        "qos": "",
        "retain": "",
        "broker": "3898d830.2de578",
        "x": 570,
        "y": 1580,
        "wires": []
    },
    {
        "id": "58029022.4eeab",
        "type": "mqtt in",
        "z": "f1b7e2b9.bfea2",
        "name": "",
        "topic": "hdmi/state",
        "qos": "2",
        "datatype": "auto",
        "broker": "3898d830.2de578",
        "x": 160,
        "y": 1580,
        "wires": [
            [
                "1b55fbc9.098694",
                "cbb4ee2d.4dbf6"
            ]
        ]
    },
    {
        "id": "af67fcf0.e0771",
        "type": "function",
        "z": "f1b7e2b9.bfea2",
        "name": "",
        "func": "var a = msg.payload\nif(a == \"N1服务器\"){\n    msg.payload = 1\n}else if(a == \"电视盒子\"){\n    msg.payload = 2\n}else if(a == \"Apple TV\"){\n    msg.payload = 3\n}else if(a == \"群晖\"){\n    msg.payload = 4\n}else if(a == \"MAC BOOK\"){\n    msg.payload = 5\n}\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 430,
        "y": 1580,
        "wires": [
            [
                "9366df3.dbccd2"
            ]
        ]
    },
    {
        "id": "44264aa6.af1954",
        "type": "ui_group",
        "z": "",
        "name": "HDMI",
        "tab": "4b6ab69.9eea548",
        "order": 6,
        "disp": true,
        "width": "6",
        "collapse": false
    },
    {
        "id": "3898d830.2de578",
        "type": "mqtt-broker",
        "z": "",
        "name": "N1",
        "broker": "192.168.123.233",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "compatmode": true,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "node-red/server/status",
        "birthQos": "0",
        "birthPayload": "在线",
        "closeTopic": "node-red/server/status",
        "closeQos": "0",
        "closePayload": "关闭",
        "willTopic": "node-red/server/status",
        "willQos": "0",
        "willPayload": "不可用"
    },
    {
        "id": "4b6ab69.9eea548",
        "type": "ui_tab",
        "z": "",
        "name": "设备控制",
        "icon": "dashboard",
        "order": 1,
        "disabled": false,
        "hidden": false
    }
]

看上去好简单样的

请教下,打板上的一排5个黑色元件,是通断继电器功能么,这个玩意儿叫啥?

光耦隔离 ,还有通断的作用

谢谢,我从pcb里看到这个光电继电器AQY211EHAX,输入电压1.14VDC,为嘛这可以直接接gpio 3.3v,
贴片电阻是并联的,应该是上拉用的吧,我如果插成品esp32s是不是不用这个电阻呢?

我抄这个作业打算用来控制模拟433遥控器的按键,但是比较菜,画pcb简单好学,这些原理就不懂了 ,请指点一下:sweat_smile:

你看反了 :sunglasses:电源端接的是灯珠,gpio是接的通断。光耦是随便找的一个模型 :sunglasses:
这个电阻最好要着,你要是能保证没啥因素影响可以去掉,我是测试的时候io电平乱跳才加的,
你要做啥433遥控

就是储物室搞了个带NFC刷卡和433遥控的门锁,NFC用手机手表都能开,
打算把433遥控器接入云控制,用继电器模拟按键,顺便用这个esp32s接入门磁反馈,物理按键控制,还有个米家蓝牙温湿度计。
请问你用的啥型号继电器 ,给我抄个作业呗?:rofl:

我用那种成品nodemcu那种esp32s,直接插上就行了,电平啥的都是做好了的,我比较菜,就不做核心电路了,做个周围电路省一下洞洞板飞线了 :joy:
就这种玩意儿,一百多块!!

固定码完全可以做一个射频遥控

光耦是之前的一个垃圾车,随便买买就行 好像叫啥ps2561

谢谢,我昨晚已经下单买了俩AQY211EHAX了,请问这款能直接接gpio么,除了你的垃圾车,有其它推荐的型号么,我比较菜,不懂元器件,请指点下 :grinning:

433码我昨天用博联pro能学码,但是没用博联测试是否能开门还