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

 找回密码
 立即注册
查看: 239|回复: 5

[技术探讨] 中移铁通插排 CMPOWER W1 适用于 Arduino 的库

[复制链接]

1

主题

7

帖子

78

积分

注册会员

Rank: 2

积分
78
金钱
71
HASS币
0
发表于 2024-4-22 14:41:41 | 显示全部楼层 |阅读模式
本帖最后由 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 也不能白嫖 分享下过程)
#define LED_PIN 16              // 定义指示灯连接的GPIO引脚
const int relayMasterPin = 0;   // 主继电器连接的GPIO引脚
const int relaySlavePin = 12;   // 从继电器连接的GPIO引脚
const int relayEnablePin = 15;  // 继电器控制引脚连接的GPIO引脚

//主继电器控制
void toggleMasterRelay(bool state) {
  setGPIO0State(relayEnablePin, HIGH);  // 启用继电器控制
  if (state) {
    setGPIO0State(relayMasterPin, HIGH);
    //setGPIO0State(14, HIGH); //红色
  } else {
    setGPIO0State(relayMasterPin, LOW);
    //setGPIO0State(14, LOW);  //
  }
  setGPIO0State(relayEnablePin, LOW);  // 禁用继电器控制
}



///从继电器控制
void toggleSlaveRelay(bool state) {
  setGPIO0State(relayEnablePin, HIGH);  // 启用继电器控制
  if (state) {
    // 如果要打开从继电器,则首先检查主继电器状态
    if (customDigitalRead(relayMasterPin) == HIGH) {
      // 如果主继电器已打开,则直接打开从继电器
      setGPIO0State(relaySlavePin, HIGH);
      setGPIO0State(5, HIGH);
    } else {
      // 如果主继电器未打开,则先打开主继电器,然后再打开从继电器
      setGPIO0State(relayMasterPin, HIGH);
      //setGPIO0State(14, HIGH);
      delay(100);  // 等待一段时间确保主继电器已经打开
      setGPIO0State(relaySlavePin, HIGH);
      setGPIO0State(5, HIGH);
    }
  } else {
    if (customDigitalRead(relayMasterPin) == LOW) {
//  customDigitalRead(relayMasterPin) == LOW && Actionsource == 0 按键
      // 如果主继电器已打开,则直接打开从继电器 //只有是按键操作的时候执行这一步
      setGPIO0State(relayMasterPin, HIGH);
    } else {
      // 如果要关闭从继电器,则直接关闭从继电器
      setGPIO0State(relaySlavePin, LOW);
      setGPIO0State(5, LOW);
    }
  }
  setGPIO0State(relayEnablePin, LOW);  // 禁用继电器控制

}



//控制Io状态
void setGPIO0State(int pin, int state) {
  if (pin == 0 || pin == 14 || pin == 16 || pin == 5 || pin == 12 || pin == 15) {
    // 如果 pin 是 0、2 或 15,使用反逻辑
    digitalWrite(pin, !state);
  } else {
    // 否则,正常操作
    digitalWrite(pin, state);
  }
  // if (powemode == 3) {
  // writeRelayStateToEEPROM();
  // }
}

// 公共获取函数
int customDigitalRead(int pin) {
  // 如果是IO 0、2或16,则进行逻辑反转
  if (pin == 0 || pin == 14 || pin == 16 || pin == 5 || pin == 12 || pin == 15) {
    return !digitalRead(pin);
  } else {
    // 否则,正常读取
    return digitalRead(pin);
  }
}




SY7T609.zip

6.46 KB, 下载次数: 3

评分

参与人数 1金钱 +12 收起 理由
jjcs + 12 高手,这是高手!

查看全部评分

回复

使用道具 举报

2

主题

37

帖子

419

积分

中级会员

Rank: 3Rank: 3

积分
419
金钱
382
HASS币
0
发表于 2024-4-22 14:50:58 | 显示全部楼层
感谢分享,已经在你那里买了插座
回复

使用道具 举报

1

主题

7

帖子

78

积分

注册会员

Rank: 2

积分
78
金钱
71
HASS币
0
 楼主| 发表于 2024-4-22 15:01:19 | 显示全部楼层
wbc 发表于 2024-4-22 14:50
感谢分享,已经在你那里买了插座

挺好用的质量
回复

使用道具 举报

1

主题

85

帖子

440

积分

中级会员

Rank: 3Rank: 3

积分
440
金钱
355
HASS币
0
发表于 2024-4-23 09:03:15 | 显示全部楼层
感谢分享,不过这个论坛里应该用esphome的会更多
回复

使用道具 举报

1

主题

49

帖子

524

积分

高级会员

Rank: 4

积分
524
金钱
475
HASS币
0
发表于 2024-4-23 09:27:15 | 显示全部楼层
插座哪里搞呀。
回复

使用道具 举报

2

主题

345

帖子

2935

积分

金牌会员

Rank: 6Rank: 6

积分
2935
金钱
2590
HASS币
0
发表于 2024-4-29 08:50:43 | 显示全部楼层
esphome挺好用的啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-5-7 05:54 , Processed in 0.111478 second(s), 31 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表