M5Stack+NodeMCU制作简易视频播放控制器-Arduino中文社区 - Powered by Discuz! Archiver

vany5921 发表于 2020-8-19 13:56

M5Stack+NodeMCU制作简易视频播放控制器

本帖最后由 vany5921 于 2020-8-30 13:28 编辑

使用M5Stack+NodeMCU制作一个简单的视频播放控制器,结合python脚本实现远程控制。
    硬件准备:
    1.M5Stack
    2.NodeMCU ESP8266
    3.白色高亮LED
    4.8P排母

在观看视频时,当我需要静音或将其跳转10秒钟时,我需要从沙发上走到笔记本电脑旁边(连接到电视)进行这些调整。因为我是如此懒惰和厌倦,因此做了这个东西。

这个怎么运行:
M5Stack(客户端)/ NodeMCU(服务器):

M5Stack将作为遥控器工作。
因此在这里,我们作为服务器的客户端。
如果我执行给定的这些操作,则它将在IP之后写入/ A或/ B,以便服务器可以执行分配的任务

if (M5.BtnA.wasReleased()) {
      http.begin("http://192.168.4.1/A");      
      int httpCode = http.GET();
      M5.Lcd.fillScreen(BLUE);
      M5.Lcd.setTextColor(WHITE);
      M5.Lcd.setTextSize(3);
      M5.Lcd.setCursor(65, 10);
      M5.Lcd.print("10BACK");
      http.end();
    }
    else if (M5.BtnC.wasReleased()) {
      http.begin("http://192.168.4.1/B");      
      int httpCode = http.GET();
      M5.Lcd.fillScreen(BLUE);
      M5.Lcd.setTextColor(WHITE);
      M5.Lcd.setTextSize(3);
      M5.Lcd.setCursor(65, 10);
      M5.Lcd.print("10FOR");
      http.end();
    }
    else if (M5.BtnB.wasReleased()) {
      http.begin("http://192.168.4.1/C");      
      int httpCode = http.GET();
      M5.Lcd.fillScreen(RED);
      M5.Lcd.setTextColor(WHITE);
      M5.Lcd.setTextSize(3);
      M5.Lcd.setCursor(65, 10);
      M5.Lcd.print("PL/PS");
      http.end();
    } else if (M5.BtnA.wasReleasefor(700)) {
      http.begin("http://192.168.4.1/D");      
      int httpCode = http.GET();
      M5.Lcd.fillScreen(BLUE);
      M5.Lcd.setTextColor(WHITE);
      M5.Lcd.setTextSize(3);
      M5.Lcd.setCursor(65, 10);
      M5.Lcd.print("+5VOL");
      http.end();
    }
    else if (M5.BtnC.wasReleasefor(700)) {
      http.begin("http://192.168.4.1/E");      
      int httpCode = http.GET();
      M5.Lcd.fillScreen(BLUE);
      M5.Lcd.setTextColor(WHITE);
      M5.Lcd.setTextSize(3);
      M5.Lcd.setCursor(65, 10);
      M5.Lcd.print("-5VOL");
      http.end();因此对于示例,我按下A按钮,然后它将在IP之后写入/ A,然后Nodemcu将在串行中写入A。
void A(){
Serial.println("A");
digitalWrite(4,1);
delay(500);
digitalWrite(4,0);
}并且它还会使NodeMCU的D2(GPIO4)上连接的LED闪烁。然后python将读取它并执行分配的任务。

if da==b'A':
   pyautogui.press('j')“ j”后退10秒,就像播放/暂停和音量增大/减小的功能


单击A后退10秒

单击B播放/暂停。

单击C前进10秒

按住C键保持700ms 音量+ 5Vol

按住A键保持700ms 音量-5Vol

Nodemcu:
我在GPIO4(D2)上连接了一个与Nodemcu的LED,这表明它已与客户端连接并正常工作。

如果有时间,您可以像这样做。



如何使用它:
将Nodemcu连接到PC并打开Arduino,然后选择板和端口并上传(如果尚未上传代码),然后


在我的情况下,端口是COM5,这就是为什么我将COM5放在这里的原因是将您的Nodemcu端口放到使其工作。
m5 = serial.Serial('COM5', 115200, timeout=.1)然后运行python程序,如果不关闭Arduino,那么它将无法正常工作

完整代码:
//////////////////M5Stack////////////////////
#include <M5Stack.h>
#include <WiFi.h>
#include <HTTPClient.h>
const char* ssid ="ESPremote";
const char* password ="12345678";
void setup(){
M5.begin();
for(uint8_t t = 4; t > 0; t--) {
      Serial.printf(" WAIT %d...\n", t);
      Serial.flush();
      delay(1000);
    }
      WiFi.mode(WIFI_STA);
      WiFi.disconnect(true);
    WiFi.begin(ssid,password);
    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    M5.Lcd.print(".");

    delay(15000);
    M5.Lcd.println("Connected to Server");
    delay(100);
    M5.Lcd.fillScreen(BLUE);
    M5.Lcd.setTextColor(WHITE);
    M5.Lcd.setTextSize(3);
    M5.Lcd.setCursor(55, 10);
    M5.Lcd.print("M5Stack Remote");
    M5.Lcd.setCursor(3, 35);
    M5.Lcd.println("A CLK 10BACK");
    M5.Lcd.println("B CLK PL/PS");
    M5.Lcd.println("C CLK 10FOR");
    M5.Lcd.println("A 700ms -5VOL");
    M5.Lcd.println("C 700ms +5VOL");      
}
}
void loop() {
M5.update();
if((WiFi.status() == WL_CONNECTED)) {

      HTTPClient http;      

if (M5.BtnA.wasReleased()) {
      http.begin("http://192.168.4.1/A");      
      int httpCode = http.GET();
      M5.Lcd.fillScreen(BLUE);
      M5.Lcd.setTextColor(WHITE);
      M5.Lcd.setTextSize(3);
      M5.Lcd.setCursor(65, 10);
      M5.Lcd.print("10BACK");
      http.end();
    }
    else if (M5.BtnC.wasReleased()) {
      http.begin("http://192.168.4.1/B");      
      int httpCode = http.GET();
      M5.Lcd.fillScreen(BLUE);
      M5.Lcd.setTextColor(WHITE);
      M5.Lcd.setTextSize(3);
      M5.Lcd.setCursor(65, 10);
      M5.Lcd.print("10FOR");
      http.end();
    }
    else if (M5.BtnB.wasReleased()) {
      http.begin("http://192.168.4.1/C");      
      int httpCode = http.GET();
      M5.Lcd.fillScreen(RED);
      M5.Lcd.setTextColor(WHITE);
      M5.Lcd.setTextSize(3);
      M5.Lcd.setCursor(65, 10);
      M5.Lcd.print("PL/PS");
      http.end();
    } else if (M5.BtnA.wasReleasefor(700)) {
      http.begin("http://192.168.4.1/D");      
      int httpCode = http.GET();
      M5.Lcd.fillScreen(BLUE);
      M5.Lcd.setTextColor(WHITE);
      M5.Lcd.setTextSize(3);
      M5.Lcd.setCursor(65, 10);
      M5.Lcd.print("+5VOL");
      http.end();
    }
    else if (M5.BtnC.wasReleasefor(700)) {
      http.begin("http://192.168.4.1/E");      
      int httpCode = http.GET();
      M5.Lcd.fillScreen(BLUE);
      M5.Lcd.setTextColor(WHITE);
      M5.Lcd.setTextSize(3);
      M5.Lcd.setCursor(65, 10);
      M5.Lcd.print("-5VOL");
      http.end();
    }
}
}//////AMAAN JAVED///////////////////////////////NODEMCU////////////////////
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

const char *ssid = "ESPremote";
const char *password = "12345678";

ESP8266WebServer server(80);

void handleRoot() {
server.send(200, "text/html", "<h1>SYSTEM IS WORKING</h1>");
}

void A(){
Serial.println("A");
digitalWrite(4,1);
delay(500);
digitalWrite(4,0);
}
void B(){
Serial.println("B");
digitalWrite(4,1);
delay(500);
digitalWrite(4,0);
}
void C(){
Serial.println("C");
digitalWrite(4,1);
delay(500);
digitalWrite(4,0);
}
void D(){
Serial.println("D");
digitalWrite(4,1);
delay(500);
digitalWrite(4,0);
}
void E(){
Serial.println("E");
digitalWrite(4,1);
delay(500);
digitalWrite(4,0);
}
void setup() {
delay(1000);
pinMode(4,OUTPUT);
Serial.begin(115200);
WiFi.softAP(ssid, password);
IPAddress myIP = WiFi.softAPIP();
server.on("/", handleRoot);
server.on("/A", A);
server.on("/", handleRoot);
server.on("/B", B);
server.on("/", handleRoot);
server.on("/C", C);
server.on("/", handleRoot);
server.on("/D", D);
server.on("/", handleRoot);
server.on("/E", E);
server.begin();
digitalWrite(4,1);
delay(500);
digitalWrite(4,0);
}
void loop() {
server.handleClient();
}
import serial
import pyautogui
m5 = serial.Serial('COM5', 115200, timeout=.1)# change port as per your Nodemcu Port
while True:
        da = m5.readline()[:-2]
        if da==b'A'
                pyautogui.press('j')
        if da==b'B'
                pyautogui.press('L')
        if da==b'C'
                pyautogui.press('k')
        if da==b'D'
                pyautogui.press('volumedown')
        if da==b'E'
                pyautogui.press('volumeup')

沧海笑1122 发表于 2020-8-19 18:15

感谢分享,是机翻吧,没看出来8266侧收到指令后是怎么执行的,8266的五个函数执行起来都是gpio4闪一下,这应该是作者的一个demo、示例。但究竟如何控制PC进行视频播放的控制,没看出来。
digitalWrite(4,1);
delay(500);
digitalWrite(4,0);

   这个帖子是不是没写完啊,帖子中多处提到由Python程序来执行,是不是有一个python程序接受8266的指令后,来驱动PC的视频播放器执行快进、快退、音量增减?
谢谢分享。

沧海笑1122 发表于 2020-8-19 18:17

PC端代码是空的,请补充一下吧。
页: [1]
查看完整版本: M5Stack+NodeMCU制作简易视频播放控制器