基于EPS32C3电脑远程开机模块设计

基于EPS32C3电脑远程开机模块设计

前言

缘起,手头资料太多了,所以想组一台NAS放在家里存储数据。在咸鱼淘了一套J3160主板加机箱,加上几块硬盘组建NAS。

对于NAS,我的需求是不用的时候关机(节省功耗),要用的时候开机。

网上的开机棒太贵了,也不够安全。

还不如自己制作一个,趁暑假期间(没去实习好亏),刚好手头有一些之前本科毕设用剩下的ESP32C3模块。加上继电器就可以实现远程开机了。

云平台选择腾讯的物联开发平台。无他-因为有ESP32官方例程。

工程修改自乐鑫官方的
Smart Light 使用 ESP32、ESP32S2 配合 腾讯连连小程序 演示了一个智能灯控制方案。

所以这里就不展示其配置过程了,详细内容见Smart LightREADME

接线原理图

IO2–IN

COM–BN

NO–PowerSW

DC±-3V3

DC–GND。

基于EPS32C3电脑远程开机模块接线

代码

short_switch就是短按。短按开机。

long_switch就是长按。长按强制关机。

GPIO初始化

继电器控制的引脚初始化。对于IO2。

esp_err_t lgpio_init()
{//zero-initialize the config structure.gpio_config_t io_conf = {};//disable interruptio_conf.intr_type = GPIO_INTR_DISABLE;//set as output modeio_conf.mode = GPIO_MODE_OUTPUT;//bit mask of the pins that you want to set,e.g.GPIO18/19io_conf.pin_bit_mask = GPIO_OUTPUT_PIN_SEL;//disable pull-down modeio_conf.pull_down_en = 0;//disable pull-up modeio_conf.pull_up_en = 0;//configure GPIO with the given settingsgpio_config(&io_conf);return gpio_set_level(GPIO_OUTPUT_IO_0,1);
}

app_main.c初始化


static esp_err_t example_driver_init(void)
{lightbulb_config_t config = {//1. Select and configure the chip
#ifdef CONFIG_LIGHTBULB_DEMO_DRIVER_SELECT_WS2812.type = DRIVER_WS2812,.driver_conf.ws2812.led_num = CONFIG_WS2812_LED_NUM,.driver_conf.ws2812.ctrl_io = CONFIG_WS2812_LED_GPIO,
#endif
#ifdef CONFIG_LIGHTBULB_DEMO_DRIVER_SELECT_PWM.type = DRIVER_ESP_PWM,.driver_conf.pwm.freq_hz = CONFIG_PWM_FREQ_HZ,
#ifdef CONFIG_IDF_TARGET_ESP32C2/* Adapt to ESP8684-DevKitM-1 * For details, please refer to: * https://docs.espressif.com/projects/espressif-esp-dev-kits/zh_CN/latest/esp8684/esp8684-devkitm-1/user_guide.html*/.driver_conf.pwm.invert_level = true,
#endif
#endif
#ifdef CONFIG_LIGHTBULB_DEMO_DRIVER_SELECT_SM2135E.type = DRIVER_SM2135E,.driver_conf.sm2135e.freq_khz = 400,.driver_conf.sm2135e.enable_iic_queue = true,.driver_conf.sm2135e.iic_clk = CONFIG_SM2135E_IIC_CLK_GPIO,.driver_conf.sm2135e.iic_sda = CONFIG_SM2135E_IIC_SDA_GPIO,.driver_conf.sm2135e.rgb_current = SM2135E_RGB_CURRENT_20MA,.driver_conf.sm2135e.wy_current = SM2135E_WY_CURRENT_40MA,
#endif// 2. Configure the drive capability.capability.enable_fades = true,.capability.fades_ms = 800,.capability.enable_status_storage = false,.capability.mode_mask = COLOR_MODE,.capability.storage_cb = NULL,//3. Configure driver io
#ifdef CONFIG_LIGHTBULB_DEMO_DRIVER_SELECT_PWM.io_conf.pwm_io.red = CONFIG_PWM_RED_GPIO,.io_conf.pwm_io.green = CONFIG_PWM_GREEN_GPIO,.io_conf.pwm_io.blue = CONFIG_PWM_BLUE_GPIO,
#endif
#ifdef CONFIG_LIGHTBULB_DEMO_DRIVER_SELECT_SM2135E.io_conf.iic_io.red = OUT3,.io_conf.iic_io.green = OUT2,.io_conf.iic_io.blue = OUT1,.io_conf.iic_io.cold_white = OUT5,.io_conf.iic_io.warm_yellow = OUT4,
#endif//4. Limit param.external_limit = NULL,//5. Gamma param.gamma_conf = NULL,//6. Init param.init_status.mode = WORK_COLOR,.init_status.on = false,.init_status.short_on = false,.init_status.long_on = false,.init_status.hue = 0,.init_status.saturation = 100,.init_status.value = 100,};return lightbulb_init(&config);
}

控制继电器开闭

简单的控制继电器的操作,通过输出引脚低电平控制继电器闭合。

esp_err_t lightbulb_set_short_switch(bool status)
{esp_err_t err = ESP_OK;LIGHTBULB_MUTEX_TAKE(portMAX_DELAY);s_lb_obj->status.short_on = status;if (status == true){gpio_set_level(GPIO_OUTPUT_IO_0,0);vTaskDelay(1500 / portTICK_RATE_MS);gpio_set_level(GPIO_OUTPUT_IO_0,1);s_lb_obj->status.short_on = !status;}LIGHTBULB_MUTEX_GIVE();return err;
}esp_err_t lightbulb_set_long_switch(bool status)
{esp_err_t err = ESP_OK;LIGHTBULB_MUTEX_TAKE(portMAX_DELAY);s_lb_obj->status.short_on = status;if (status == true){gpio_set_level(GPIO_OUTPUT_IO_0,0);vTaskDelay(15000 / portTICK_RATE_MS);gpio_set_level(GPIO_OUTPUT_IO_0,1);s_lb_obj->status.short_on = !status;}LIGHTBULB_MUTEX_GIVE();return err;
}

获取腾讯云指令按钮的值

bool lightbulb_get_short_switch(void)
{LIGHTBULB_CHECK(s_lb_obj, "not init", return ESP_ERR_INVALID_ARG);LIGHTBULB_MUTEX_TAKE(portMAX_DELAY);bool result = s_lb_obj->status.short_on;LIGHTBULB_MUTEX_GIVE();return result;
}bool lightbulb_get_long_switch(void)
{LIGHTBULB_CHECK(s_lb_obj, "not init", return ESP_ERR_INVALID_ARG);LIGHTBULB_MUTEX_TAKE(portMAX_DELAY);bool result = s_lb_obj->status.long_on;LIGHTBULB_MUTEX_GIVE();return result;
}

任务切换逻辑

  1. 获取腾讯云参数后进入相应的函数。

  2. 设置继电器引脚–控制继电器通。

  3. 设置继电器引脚–控制继电器断。

  4. 更新按钮的状态。

  5. 将值写回参数上传回腾讯云。


/* Callback to handle commands received from the QCloud cloud */
static esp_err_t light_get_param(const char *id, esp_qcloud_param_val_t *val)
{if (!strcmp(id, "power_switch")) {val->b = lightbulb_get_switch();} else if (!strcmp(id, "value")) {val->i = lightbulb_get_value();} else if (!strcmp(id, "hue")) {val->i = lightbulb_get_hue();} else if (!strcmp(id, "saturation")) {val->i = lightbulb_get_saturation();} else if (!strcmp(id, "comp_switch_s")) {val->b = lightbulb_get_short_switch();} else if (!strcmp(id, "comp_switch_l")) {val->b = lightbulb_get_long_switch();}ESP_LOGI(TAG, "Report id: %s, val: %d", id, val->i);return ESP_OK;
}/* Callback to handle commands received from the QCloud cloud */
static esp_err_t light_set_param(const char *id, const esp_qcloud_param_val_t *val)
{esp_err_t err = ESP_FAIL;ESP_LOGI(TAG, "Received id: %s, val: %d", id, val->i);if (!strcmp(id, "power_switch")) {err = lightbulb_set_switch(val->b);} else if (!strcmp(id, "value")) {err = lightbulb_set_value(val->i);} else if (!strcmp(id, "hue")) {err = lightbulb_set_hue(val->i);} else if (!strcmp(id, "saturation")) {err = lightbulb_set_saturation(val->i);} else if (!strcmp(id, "comp_switch_s")) {err = lightbulb_set_short_switch(val->b);} else if (!strcmp(id, "comp_switch_l")) {err = lightbulb_set_long_switch(val->b);} else {ESP_LOGW(TAG, "This parameter is not supported");}/* Report driver changes to the cloud side */esp_qcloud_iothub_report_all_property();return err;
}

腾讯云三元组配置

腾讯云三元组配置

安装云平台的内容一一对应填入。

腾讯云平台的内容

更改数据模板

添加数据模板

{"version": "1.0","profile": {"ProductId": "65BEMES9XM","CategoryId": "141"},"properties": [{"id": "power_switch","name": "电灯开关","desc": "控制电灯开灭","required": true,"mode": "rw","define": {"type": "bool","mapping": {"0": "关","1": "开"}}}, {"id": "comp_switch_s","name": "电脑开关点按","desc": "电脑开关机点按","required": true,"mode": "rw","define": {"type": "bool","mapping": {"0": "关","1": "开"}}},{"id": "comp_switch_l","name": "电脑开关长按","desc": "电脑开关机长按","required": true,"mode": "rw","define": {"type": "bool","mapping": {"0": "关","1": "开"}}},{"id": "saturation","name": "饱和度","desc": "","mode": "rw","define": {"type": "int","min": "0","max": "100","start": "0","step": "1","unit": ""},"required": false}, {"id": "value","name": "明度","desc": "","mode": "rw","define": {"type": "int","min": "0","max": "100","start": "0","step": "1","unit": ""},"required": false}, {"id": "hue","name": "色调","desc": "","mode": "rw","define": {"type": "int","min": "0","max": "360","start": "0","step": "1","unit": ""},"required": false}],"events": [{"id": "hardware_fault","name": "Hardware_fault","desc": "Report hardware fault","type": "fault","required": false,"params": [{"id": "name","name": "Name","desc": "Name like: memory,tf card, censors ...","define": {"type": "string","min": "0","max": "64"}}, {"id": "error_code","name": "Error_Code","desc": "Error code for fault","define": {"type": "int","unit": "","step": "1","min": "0","max": "2000","start": "1"}}]}],"actions": []
}

使用方法

登录腾讯云-物联开发平台

公共实例

设备管理

在这里插入图片描述

点击设备的查看界面

进入在线调试

下发指令。

远程开机。

愉快的使用吧。

在这里插入图片描述

在这里插入图片描述

工程地址

longchentian/ESP32-Remote-PC-Power-On-via-Tencent-Cloud: ESP32-Remote-PC-Power-On-via-Tencent-Cloud:esp32远程电脑开机(基于腾讯云) (github.com)

基于EPS32C3电脑远程开机模块设计资源-CSDN文库

后记

没时间折腾,直接更改EPS32的官方例程。

仅仅添加了几行代码实现了想要的工程。

原理很简单,代码写得也很简陋,仅供参考。

等有空了(大概率没空),后续添加电脑状态识别(Power LED+和Power LED-),接入引脚读取电平。

有闲置电脑的同学可以折腾起来,实现NAS远程开机、电脑远程开机、服务器远程开机。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/421680.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

”CSS 网格“二维布局系统(补充)——WEB开发系列32

CSS 网格布局是一种二维布局系统,用于网页设计。通过使用网格,你可以将内容以行和列的形式进行排列。此外,网格布局还能够简便地实现一些复杂的布局结构。 一、什么是网格布局? CSS网格布局是一种二维布局系统,它允许…

降维打击 华为赢麻了

文|琥珀食酒社 作者 | 积溪 真是赢麻了 华为估计都懵了 这辈子还能打这么富裕的仗? 其实在苹果和华为的发布会召开之前 我就知道华为肯定会赢 但我没想到 苹果会这么拉胯 华为这是妥妥的降维打击啊 就说这苹果iPhone 16吧 屏幕是变大了、颜色…

动手学深度学习(pytorch土堆)-03常见的Transforms

Compose transforms.Compose 是 PyTorch 中的一个函数,用于将多个图像变换操作组合在一起,形成一个变换流水线。这样可以将一系列的图像处理操作整合为一个步骤,便于对图像进行批量预处理或增强。 基本用法 transforms.Compose 接受一个列表…

TCP通信实现

目录 前言 一、实现TCP通信 二、通信原理 (网路传输的封包与拆包) 三、通信过程中的头 1.MAC帧 2. IP头 3.TCP头 4.UDP头 总结 前言 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接…

鸿蒙轻内核A核源码分析系列六 MMU协处理器(2)

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 轻内核A核源码分析系列一 数据结构-双向循环链表 轻内核A核源码分析系列二 数据结构-位图操作 轻内核A核源码分析系列三 物理内存(1&#xff0…

使用QT界面运行roslaunch,roslaunch,roscore等

QT通过界面运行rosrun,roslaunch,roscore等 QT 运行roslaunch加入ui界面修改cmakelist运行 使用qt界面运行rosrun,roscore,roslaunch等方法一方法二方法三 QT 运行roslaunch 首先需要使用QT安装好ROS插件,并且配置好环境,这个在之前的文章已…

Java架构师实战篇Redis亿级数据统计方案

目录 1 Redis亿个keys数据统计方案2 Redis聚合统计(SUNIONSTORE)3 Redis排序统计(LRANGE)4 值状态统计(bitmap)4.1 位图简介4.2 应用场景4.3 常用的命令4 基数统计(SADD)5 总结想学习架构师构建流程请跳转:Java架构师系统架构设计 1 Redis亿个keys数据统计方案 在 Web 和移动…

CTFHub技能树-信息泄露-HG泄漏

目录 漏洞产生原因 解题过程 当开发人员使用 Mercurial 进行版本控制,对站点自动部署。如果配置不当,可能会将.hg 文件夹直接部署到线上环境。这就引起了 hg 泄露漏洞。 漏洞产生原因 Mercurial(hg)是一种分布式版本控制系统,它与Git类似也可以用于管…

[Linux Kernel Block Layer第一篇] block layer架构设计

目录 1. single queue架构 2. multi-queue架构(blk-mq) 3. 问题 随着SSD快速存储设备的发展,内核社区越发发现,存储的性能瓶颈从硬件存储设备转移到了内核block layer,主要因为当时的内核block layer是single hw queue的架构&…

VLAN原理与配置

一、基本原理 1、VLAN数据帧格式 IEEE 802.1Q标准对Ethernet帧格式进行了修改,在源MAC地址字段和协议类型字段之间加入4字节的802.1Q Tag。VLAN帧最小帧长为64字节。 Type字段含义:长度为2字节,表示帧类型。取值为0x8100时表示802.1Q Tag帧…

Python 调用手机摄像头

Python 调用手机摄像头 在手机上安装软件 这里以安卓手机作为演示,ISO也是差不多的 软件下载地址 注意:要想在电脑上查看手机摄像头拍摄的内容的在一个局域网里面(没有 WIFI 可以使用 热点 ) 安装完打开IP摄像头服务器 点击分享查看IP 查看局域网的I…

日志相关知识

1.作用 a.为了代替System.out.println(),可以定义格式,重定向文件等。 b.可以存档,便于追踪问题。 c.可以按级别分类,便于打开或关闭某些级别。 d.可以根据配置文件调整日志,无需修改代码。 …

【CanMV K230 AI视觉】 人体检测

【CanMV K230 AI视觉】 人体检测 人体检测 动态测试效果可以去下面网站自己看。 B站视频链接:已做成合集 抖音链接:已做成合集 人体检测 人体检测是判断摄像头画面中有无出现人体,常用于人体数量检测,人流量监控以及安防监控等。…

# CentOS7 设置mysql的 root 用户密码时,报错 ERROR 1819(HY000)...ERROR1193... 解决方法。

CentOS7 设置mysql的 root 用户密码时,报错 ERROR 1819(HY000)…ERROR1193… 解决方法。 一、错误描述: mysql ALTER USER rootlocalhost IDENTIFIED BY 123; ERROR 1819 (HY000) Your password does not satisfy the current policy requirementsERRO…

NGINX开启HTTP3,给web应用提个速

环境说明 linuxdockernginx版本:1.27 HTTP3/QUIC介绍 HTTP3是由IETF于2022年发布的一个标准,文档地址为:https://datatracker.ietf.org/doc/html/rfc9114 如rfc9114所述,http3主要基于QUIC协议实现,在具备高性能的同时又兼备了…

最全面的递归算法详解,一篇足矣(高手必备)

在编程中,递归和循环是两种常用的控制结构,各有其独特的优缺点。理解这两者的特点和应用场景,对于编写高效、可读的代码至关重要。 什么是递归? 递归是一种强大的编程技术,允许函数在其定义中调用自身。递归通常涉及…

nvm ls-remote: N/A

背景: 项目因为node版本问题运行失败,在彻底删除node后再重新安装 问题描述: 原因分析: 可能是因为终端不能获取镜像包 解决办法: 【方法一】 输入: step1. export NVM_NODEJS_ORG_MIRRORIndex of …

常用电路及分析

前言 最近在研究一些简单的硬件知识,把在网上看到的一些常见电路分析总结了一下。 有纰漏请指出,转载请说明。 学习交流请发邮件 1280253714qq.com 串联稳压电路 三极管串联线性稳压电路原理详解及Multisim仿真_三极管稳压电路-CSDN博客 线性稳压电…

LeetCode 206. 反转链表

题目描述 分析 迭代代码与之前的K个一组翻转链表相同。 递归代码的一个首要任务是找到整个链表的尾结点(反转后的头结点)。 之后一步一步地将tail结点向前返回,但在返回的过程中不利用,只是传递最终答案。绿线的操作就是当head…

空间数据库概述

空间数据库简介 空间数据库是 地理信息系统 在计算机物理存储介质中存储的,与GIS应用相关的地理空间数据的总和。一般以一系列特定结构的文件形式组织后存储在介质上。 空间数据库的特点 可以存储、处理空间数据相比普通数据库提供更多、更复杂的数据类型以及更多…