『瀚思彼岸』» 智能家居技术论坛

标题: 中移铁通插排 CMPOWER W1 适用于 Arduino 的库 [打印本页]

作者: routeros.cn    时间: 2024-4-22 14:41
标题: 中移铁通插排 CMPOWER W1 适用于 Arduino 的库
本帖最后由 routeros.cn 于 2024-4-22 21:36 编辑

中移铁通插排 CMPOWER W1 适用于 Arduino 的库

基础代码
https://github.com/routeroscn/SY7T609
需要适当修改适用

比较粗糙
根据 https://github.com/baejinhoon-kor/IC

https://github.com/shzlww/esphome_custom_components
做的修改适用
适用于获取电压电流等常用参数
电量获取有点问题 没有做研究了
test.txt 参考代码没有做考证

关于自动校正电压如果有稳定的电源参考值
比如当前已知电压 是 230v

程序可以第一次 启动的时候
// 因为是第一次自动校准0x038270 230v
sendCalibration(0x038270);

如果是手动 可以 sendCalibration(230000);
电流 也可以参考增加函数去校准 目前看电流不太需要校准

包含校准的代码更新在了github 附件中的没有包含 (懒)
这个芯片的自动校准还是 很科学的
关于  控制上的一些代码
仅供参考 可能很久没逛过论坛了编辑下代码经常丢字(看名字大家应该知道鄙人是玩路由的 今年没事才玩下esp 也不能白嫖 分享下过程)
  1. #define LED_PIN 16              // 定义指示灯连接的GPIO引脚
  2. const int relayMasterPin = 0;   // 主继电器连接的GPIO引脚
  3. const int relaySlavePin = 12;   // 从继电器连接的GPIO引脚
  4. const int relayEnablePin = 15;  // 继电器控制引脚连接的GPIO引脚

  5. //主继电器控制
  6. void toggleMasterRelay(bool state) {
  7.   setGPIO0State(relayEnablePin, HIGH);  // 启用继电器控制
  8.   if (state) {
  9.     setGPIO0State(relayMasterPin, HIGH);
  10.     //setGPIO0State(14, HIGH); //红色
  11.   } else {
  12.     setGPIO0State(relayMasterPin, LOW);
  13.     //setGPIO0State(14, LOW);  //
  14.   }
  15.   setGPIO0State(relayEnablePin, LOW);  // 禁用继电器控制
  16. }



  17. ///从继电器控制
  18. void toggleSlaveRelay(bool state) {
  19.   setGPIO0State(relayEnablePin, HIGH);  // 启用继电器控制
  20.   if (state) {
  21.     // 如果要打开从继电器,则首先检查主继电器状态
  22.     if (customDigitalRead(relayMasterPin) == HIGH) {
  23.       // 如果主继电器已打开,则直接打开从继电器
  24.       setGPIO0State(relaySlavePin, HIGH);
  25.       setGPIO0State(5, HIGH);
  26.     } else {
  27.       // 如果主继电器未打开,则先打开主继电器,然后再打开从继电器
  28.       setGPIO0State(relayMasterPin, HIGH);
  29.       //setGPIO0State(14, HIGH);
  30.       delay(100);  // 等待一段时间确保主继电器已经打开
  31.       setGPIO0State(relaySlavePin, HIGH);
  32.       setGPIO0State(5, HIGH);
  33.     }
  34.   } else {
  35.     if (customDigitalRead(relayMasterPin) == LOW) {
  36. //  customDigitalRead(relayMasterPin) == LOW && Actionsource == 0 按键
  37.       // 如果主继电器已打开,则直接打开从继电器 //只有是按键操作的时候执行这一步
  38.       setGPIO0State(relayMasterPin, HIGH);
  39.     } else {
  40.       // 如果要关闭从继电器,则直接关闭从继电器
  41.       setGPIO0State(relaySlavePin, LOW);
  42.       setGPIO0State(5, LOW);
  43.     }
  44.   }
  45.   setGPIO0State(relayEnablePin, LOW);  // 禁用继电器控制

  46. }



  47. //控制Io状态
  48. void setGPIO0State(int pin, int state) {
  49.   if (pin == 0 || pin == 14 || pin == 16 || pin == 5 || pin == 12 || pin == 15) {
  50.     // 如果 pin 是 0、2 或 15,使用反逻辑
  51.     digitalWrite(pin, !state);
  52.   } else {
  53.     // 否则,正常操作
  54.     digitalWrite(pin, state);
  55.   }
  56.   // if (powemode == 3) {
  57.   // writeRelayStateToEEPROM();
  58.   // }
  59. }

  60. // 公共获取函数
  61. int customDigitalRead(int pin) {
  62.   // 如果是IO 0、2或16,则进行逻辑反转
  63.   if (pin == 0 || pin == 14 || pin == 16 || pin == 5 || pin == 12 || pin == 15) {
  64.     return !digitalRead(pin);
  65.   } else {
  66.     // 否则,正常读取
  67.     return digitalRead(pin);
  68.   }
  69. }
复制代码





作者: wbc    时间: 2024-4-22 14:50
感谢分享,已经在你那里买了插座
作者: routeros.cn    时间: 2024-4-22 15:01
wbc 发表于 2024-4-22 14:50
感谢分享,已经在你那里买了插座

挺好用的质量
作者: Juices    时间: 2024-4-23 09:03
感谢分享,不过这个论坛里应该用esphome的会更多
作者: celesha    时间: 2024-4-23 09:27
插座哪里搞呀。
作者: godzqh    时间: 2024-4-29 08:50
esphome挺好用的啊

作者: routeros.cn    时间: 2024-6-14 08:34
github.com 中的演示代码更新..需要自行补充配网等代码
作者: thisharp    时间: 2024-6-29 01:18
有没天猫和小爱支持
作者: chenxiaowei    时间: 2025-2-6 20:40
应该是“功率因数”




欢迎光临 『瀚思彼岸』» 智能家居技术论坛 (https://bbs.hassbian.com/) Powered by Discuz! X3.5