在宿舍刷剧时经常会贪在凳子上懒得调音量,看着实验室吃灰的8266,故有了想法做一个遥控控制音量的东东。
esp8266部分
arduino比较简单,直接给出代码。
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(115200);
// 假如启动过程出现问题,提示用户启动失败
Serial.println("Enabling IRin");
irrecv.enableIRIn(); // Start the receiver
Serial.println("Enabled IRin");
}
void loop() {
if (irrecv.decode(&results)) { //检查是否接收到红外遥控信号
serialPrintUint64(results.value, HEX);
irrecv.resume(); //接收下一指令
}
delay(100);
}
其中需要安装一个红外库:
接线图如下:
其中红外左引脚为信号输出,接到8266的D4引脚
采用买套件送的红外遥控
如图所示,当收到信号后,led会闪烁。
python代码解析部分
import pyautogui
#pyautogui.press('volumeup') #调大音量
import serial #导入模块
try:
portx="COM6"
bps=115200
#超时设置,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)
timex=None
ser=serial.Serial(portx,bps,timeout=timex)
#print("串口详情参数:", ser)
#十六进制的发送
#result=ser.write(chr(0x06).encode("utf-8"))#写数据
#print("写总字节数:",result)
#十六进制的读取
while 1:
#print(ser.read().hex())#读一个字节
sign = ser.read(6)
print(sign) # 读一个字节
if sign == b'FFA857':
print("音量加")
pyautogui.press('volumeup')
if sign == b'FFE01F':
print("音量减")
pyautogui.press('volumedown')
ser.flushInput()
ser.close()#关闭串口
except Exception as e:
print("---异常---:",e)
控制部分采用pyautogui,模仿真实按键按下,当收到指定信号后,调高或调低音量。
就这样。