Android手机使用Tasker控制充电

起因

看到网上有人说,备用机长时间插在电源上会导致电池鼓包,虽然不确定真假,但还是“宁可信其有,不可信其无”,安全第一嘛。

工具

  1. tasker
  2. esp8266开发板
  3. 带光耦的继电器
  4. usb公头,母头,线材若干
  5. 电烙铁(非必需,如果直接截断一根usb线接到继电器上的话,4也可以省了)

操作

基本流程

tasker在电量变化时通知单片机当前电量,单片机收到手机发来的http post包后查看当前电量,并决定是否操作继电器。例如,当点量小于35时启动充电,等于100时关闭充电,36~99时不进行任何操作。

tasker

在tasker上新建一个电量变化配置文件。

并在电量变化时将当前电量发送至esp8266(或者发送至自己的物联网服务器,再由该服务器控制继电器以实现更复杂的功能。物联网部分今后有系列文章详细介绍),可参考这篇博客《Android手机使用Tasker转发短信及来电》

esp8266+光耦继电器

大致效果如图。简单来说就是把继电器的vcc,gnd,sig连接至开发板的Vusb,GND,一个gpio口。之后将usb充电线的vcc线截断,连接至继电器的常开端(为了,省电)

备注:关于光耦继电器

esp8266的gpio是3.3v,但常见的arduino继电器模块是5V的,部分模块可能无法正常使用。采用光耦继电器可以避免因为电平不匹配带来的麻烦。

arduino

这里使用arduino来编写esp8266的代码。只贴出处理函数,其它支持代码(如,连接wifi,启动web服务器,gpio初始化)略。

server.on("/auto", [](){
digitalWrite(led, 0);
for (uint8_t i=0; i<server.args(); i++){
if (server.argName(i) == "battery"){

//当电量<35时,继电器对应的引脚写1,启动继电器

if(server.arg(i).toInt() < 35){
digitalWrite(PIN, 1);
}

//当电量=100时,继电器对应的引脚写0,关闭继电器

if(server.arg(i).toInt() == 100){
digitalWrite(PIN, 0);
}
}
}
digitalWrite(led, 1);
server.send(200, "text/plain", "auto");
});

ESP8266 可以使用lua编写,不过我个人对它不熟所以用了相对熟悉的arduino

其它思路

  1. Tasker中可以实现对应电量触发不同任务,给继电器直接下达开/关命令。我并没有采用这种思路,原因见2
  2. Tasker将电池电量送至物联网服务器,由物联网服务器来控制继电器开关。最初设计为该思路,但物联网服务器没写完,故只能将这部分功能转移到单片机上实现

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注