查看: 1975|回复: 2

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

[复制链接]

该用户从未签到

发表于 2020-8-19 13:56 | 显示全部楼层 |阅读模式
本帖最后由 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,以便服务器可以执行分配的任务

  1. if (M5.BtnA.wasReleased()) {
  2.       http.begin("http://192.168.4.1/A");      
  3.         int httpCode = http.GET();
  4.         M5.Lcd.fillScreen(BLUE);
  5.         M5.Lcd.setTextColor(WHITE);
  6.         M5.Lcd.setTextSize(3);
  7.         M5.Lcd.setCursor(65, 10);
  8.         M5.Lcd.print("10BACK");
  9.         http.end();
  10.     }
  11.     else if (M5.BtnC.wasReleased()) {
  12.       http.begin("http://192.168.4.1/B");      
  13.         int httpCode = http.GET();
  14.         M5.Lcd.fillScreen(BLUE);
  15.         M5.Lcd.setTextColor(WHITE);
  16.         M5.Lcd.setTextSize(3);
  17.         M5.Lcd.setCursor(65, 10);
  18.         M5.Lcd.print("10FOR");
  19.         http.end();
  20.     }
  21.     else if (M5.BtnB.wasReleased()) {
  22.       http.begin("http://192.168.4.1/C");      
  23.         int httpCode = http.GET();
  24.         M5.Lcd.fillScreen(RED);
  25.         M5.Lcd.setTextColor(WHITE);
  26.         M5.Lcd.setTextSize(3);
  27.         M5.Lcd.setCursor(65, 10);
  28.         M5.Lcd.print("PL/PS");
  29.         http.end();
  30.     } else if (M5.BtnA.wasReleasefor(700)) {
  31.       http.begin("http://192.168.4.1/D");      
  32.         int httpCode = http.GET();
  33.         M5.Lcd.fillScreen(BLUE);
  34.         M5.Lcd.setTextColor(WHITE);
  35.         M5.Lcd.setTextSize(3);
  36.         M5.Lcd.setCursor(65, 10);
  37.         M5.Lcd.print("+5VOL");
  38.         http.end();
  39.     }
  40.     else if (M5.BtnC.wasReleasefor(700)) {
  41.       http.begin("http://192.168.4.1/E");      
  42.         int httpCode = http.GET();
  43.         M5.Lcd.fillScreen(BLUE);
  44.         M5.Lcd.setTextColor(WHITE);
  45.         M5.Lcd.setTextSize(3);
  46.         M5.Lcd.setCursor(65, 10);
  47.         M5.Lcd.print("-5VOL");
  48.         http.end();
复制代码
因此对于示例,我按下A按钮,然后它将在IP之后写入/ A,然后Nodemcu将在串行中写入A。
  1. void A(){
  2.   Serial.println("A");
  3.   digitalWrite(4,1);
  4.   delay(500);
  5.   digitalWrite(4,0);
  6. }
复制代码
并且它还会使NodeMCU的D2(GPIO4)上连接的LED闪烁。然后python将读取它并执行分配的任务。

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

123.jpeg
单击A后退10秒
222.jpeg
单击B播放/暂停。
333.jpeg
单击C前进10秒
444.jpeg
按住C键保持700ms 音量+ 5Vol
555.jpeg
按住A键保持700ms 音量-5Vol
66.jpeg
Nodemcu:
我在GPIO4(D2)上连接了一个与Nodemcu的LED,这表明它已与客户端连接并正常工作。
1111.jpeg
如果有时间,您可以像这样做。
2222.jpeg
6666.jpeg
7777.jpeg
如何使用它:
将Nodemcu连接到PC并打开Arduino,然后选择板和端口并上传(如果尚未上传代码),然后
888.jpg
999.jpeg
在我的情况下,端口是COM5,这就是为什么我将COM5放在这里的原因是将您的Nodemcu端口放到使其工作。
  1. m5 = serial.Serial('COM5', 115200, timeout=.1)
复制代码
然后运行python程序,如果不关闭Arduino,那么它将无法正常工作

完整代码:
  1. //////////////////M5Stack////////////////////
  2. #include <M5Stack.h>
  3. #include <WiFi.h>
  4. #include <HTTPClient.h>
  5. const char* ssid ="ESPremote";
  6. const char* password ="12345678";
  7. void setup(){
  8.   M5.begin();  
  9.   for(uint8_t t = 4; t > 0; t--) {
  10.         Serial.printf("[SETUP] WAIT %d...\n", t);
  11.         Serial.flush();
  12.         delay(1000);
  13.     }
  14.       WiFi.mode(WIFI_STA);
  15.       WiFi.disconnect(true);
  16.     WiFi.begin(ssid,password);
  17.     while (WiFi.status() != WL_CONNECTED) {
  18.     delay(500);
  19.     M5.Lcd.print(".");

  20.     delay(15000);
  21.     M5.Lcd.println("Connected to Server");
  22.     delay(100);
  23.     M5.Lcd.fillScreen(BLUE);
  24.     M5.Lcd.setTextColor(WHITE);
  25.     M5.Lcd.setTextSize(3);
  26.     M5.Lcd.setCursor(55, 10);
  27.     M5.Lcd.print("M5Stack Remote");
  28.     M5.Lcd.setCursor(3, 35);
  29.     M5.Lcd.println("A CLK 10BACK");
  30.     M5.Lcd.println("B CLK PL/PS");
  31.     M5.Lcd.println("C CLK 10FOR");
  32.     M5.Lcd.println("A 700ms -5VOL");
  33.     M5.Lcd.println("C 700ms +5VOL");      
  34.   }
  35. }
  36. void loop() {
  37.   M5.update();
  38.   if((WiFi.status() == WL_CONNECTED)) {

  39.         HTTPClient http;      
  40.   
  41.   if (M5.BtnA.wasReleased()) {
  42.       http.begin("http://192.168.4.1/A");      
  43.         int httpCode = http.GET();
  44.         M5.Lcd.fillScreen(BLUE);
  45.         M5.Lcd.setTextColor(WHITE);
  46.         M5.Lcd.setTextSize(3);
  47.         M5.Lcd.setCursor(65, 10);
  48.         M5.Lcd.print("10BACK");
  49.         http.end();
  50.     }
  51.     else if (M5.BtnC.wasReleased()) {
  52.       http.begin("http://192.168.4.1/B");      
  53.         int httpCode = http.GET();
  54.         M5.Lcd.fillScreen(BLUE);
  55.         M5.Lcd.setTextColor(WHITE);
  56.         M5.Lcd.setTextSize(3);
  57.         M5.Lcd.setCursor(65, 10);
  58.         M5.Lcd.print("10FOR");
  59.         http.end();
  60.     }
  61.     else if (M5.BtnB.wasReleased()) {
  62.       http.begin("http://192.168.4.1/C");      
  63.         int httpCode = http.GET();
  64.         M5.Lcd.fillScreen(RED);
  65.         M5.Lcd.setTextColor(WHITE);
  66.         M5.Lcd.setTextSize(3);
  67.         M5.Lcd.setCursor(65, 10);
  68.         M5.Lcd.print("PL/PS");
  69.         http.end();
  70.     } else if (M5.BtnA.wasReleasefor(700)) {
  71.       http.begin("http://192.168.4.1/D");      
  72.         int httpCode = http.GET();
  73.         M5.Lcd.fillScreen(BLUE);
  74.         M5.Lcd.setTextColor(WHITE);
  75.         M5.Lcd.setTextSize(3);
  76.         M5.Lcd.setCursor(65, 10);
  77.         M5.Lcd.print("+5VOL");
  78.         http.end();
  79.     }
  80.     else if (M5.BtnC.wasReleasefor(700)) {
  81.       http.begin("http://192.168.4.1/E");      
  82.         int httpCode = http.GET();
  83.         M5.Lcd.fillScreen(BLUE);
  84.         M5.Lcd.setTextColor(WHITE);
  85.         M5.Lcd.setTextSize(3);
  86.         M5.Lcd.setCursor(65, 10);
  87.         M5.Lcd.print("-5VOL");
  88.         http.end();
  89.     }
  90.   }
  91. }//////AMAAN JAVED/////////////
复制代码
  1. //////////////////NODEMCU////////////////////
  2. #include <ESP8266WiFi.h>
  3. #include <WiFiClient.h>
  4. #include <ESP8266WebServer.h>

  5. const char *ssid = "ESPremote";
  6. const char *password = "12345678";

  7. ESP8266WebServer server(80);

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

  11. void A(){
  12.   Serial.println("A");
  13.   digitalWrite(4,1);
  14.   delay(500);
  15.   digitalWrite(4,0);
  16. }
  17. void B(){
  18.   Serial.println("B");
  19.   digitalWrite(4,1);
  20.   delay(500);
  21.   digitalWrite(4,0);
  22. }
  23. void C(){
  24.   Serial.println("C");
  25.   digitalWrite(4,1);
  26.   delay(500);
  27.   digitalWrite(4,0);
  28. }
  29. void D(){
  30.   Serial.println("D");
  31.   digitalWrite(4,1);
  32.   delay(500);
  33.   digitalWrite(4,0);
  34. }
  35. void E(){
  36.   Serial.println("E");
  37.   digitalWrite(4,1);
  38.   delay(500);
  39.   digitalWrite(4,0);
  40. }
  41. void setup() {
  42.   delay(1000);
  43.   pinMode(4,OUTPUT);
  44.   Serial.begin(115200);
  45.   WiFi.softAP(ssid, password);
  46.   IPAddress myIP = WiFi.softAPIP();
  47.   server.on("/", handleRoot);
  48.   server.on("/A", A);
  49.   server.on("/", handleRoot);
  50.   server.on("/B", B);
  51.   server.on("/", handleRoot);
  52.   server.on("/C", C);
  53.   server.on("/", handleRoot);
  54.   server.on("/D", D);
  55.   server.on("/", handleRoot);
  56.   server.on("/E", E);
  57.   server.begin();
  58.   digitalWrite(4,1);
  59.   delay(500);
  60.   digitalWrite(4,0);
  61. }
  62. void loop() {
  63.   server.handleClient();
  64. }
复制代码
  1. import serial
  2. import pyautogui
  3. m5 = serial.Serial('COM5', 115200, timeout=.1)# change port as per your Nodemcu Port
  4. while True:
  5.         da = m5.readline()[:-2]
  6.         if da==b'A'
  7.                 pyautogui.press('j')
  8.         if da==b'B'
  9.                 pyautogui.press('L')
  10.         if da==b'C'
  11.                 pyautogui.press('k')
  12.         if da==b'D'
  13.                 pyautogui.press('volumedown')
  14.         if da==b'E'
  15.                 pyautogui.press('volumeup')
复制代码


该用户从未签到

发表于 2020-8-19 18:15 | 显示全部楼层
感谢分享,是机翻吧,没看出来8266侧收到指令后是怎么执行的,8266的五个函数执行起来都是gpio4闪一下,这应该是作者的一个demo、示例。但究竟如何控制PC进行视频播放的控制,没看出来。
  1.   digitalWrite(4,1);
  2.   delay(500);
  3.   digitalWrite(4,0);
复制代码


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

该用户从未签到

发表于 2020-8-19 18:17 | 显示全部楼层
PC端代码是空的,请补充一下吧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

arduino程序设计基础 blinker物联网解决方案

热门推荐

【教程】pico+hx711电子秤
【教程】pico+hx711电子秤
pico+hx711电子秤 【前言】 我做过多款电子秤,这次移植到pico上
ESP8266+Onenet平台远程数据传输和控制
ESP8266+Onenet平台远程数
这是我的第一个diy,主要功能实现了onenet云平台温湿度数据的传输和远程控制LED灯平台
【Arduino】108种传感器模块系列实验(48)---三轴ADXL345模块
【Arduino】108种传感器模
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
ps2遥控小车——uno实现
ps2遥控小车——uno实现
前几天在阁楼发现了好久以前3d打印,激光切割的底盘,于是决定做这个东西 正好手上又
震惊!OLED菜单竟只用10行代码就可以完成到完美!!!
震惊!OLED菜单竟只用10行
震惊!OLED菜单竟只用10行代码就可
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表