分类存档: Lifestyle

再一次,胶片摄影

也不能叫摄影,就是拍拍照。

数码相机还没有玩明白呢,不知道为什么突然想玩胶片了。

上一次用胶片,已经记不得是什么时候了,用的应该是国产的傻瓜机,拍一卷的成本也特别高。

后来了解了一下现在的胶片相机,找到一个佳能 EOS 10 QD,成色特别好的竟然也很便宜,配上朋友送的 50/1.8,入门无压力。

EOS 10 QD

到手之后,装上胶卷,切换到 A 档,半按快门自动对焦,自动测光,按下快门自动过片,使用起来跟数码相机并没有太多区别。

除了对焦点少一点,和不能马上回放。

一开始总觉得,每按一次快门,都是有成本的,所以特别珍惜,虽然一卷只有 36 张,还是用了很久的时间才拍完。

拍完之后,赶紧上淘宝找冲洗的店家,赶紧打包,赶紧叫来快递,把胶卷寄出去。

在等待店家把冲洗扫描后的照片传回的时候,就跟感觉在等待彩票开奖一样,有没有对上焦?快门准不准?胶卷装得对不对?

幸好自动的机器还是挺保险的,收到照片时,36 张还是 36 张,除了有些对焦点选错了,基本上都还能看。

虽然富士 SP3000 扫描评价很低,但是还是想感受一下,这个胶卷配上这个扫描仪,是个什么感觉。

Ants

Starbucks

生日花牌

Lotus

荷花池

既然能出片了,就想着试试其他的,总觉得如果一直用自动的机器,为什么不直接用数码相机呢。

在看了很多年代更久远一点的相机之后,对那种金属质感难以释怀。看了很多文章之后,对比了一下,最终选择了这款:

Nikon FE

Nikon FE,手动对焦,带光圈优先模式,最高快门速度 1/1000 秒,磨砂裂象对焦。

至于结果嘛,就只能等下一次开奖咯。

Garmin vivosmart 4 使用体验

Garmin vivosmart 4

缘由

在去年秋天,我突然觉得不能继续放肆下去,需要对体能和体形进行更好的改善,刚好公司的健身房也算是设施完善,因此首先就开始了通过有氧来进行减脂的训练。

作为一个器材党、数据党,在运动的时候怎么能没有一个设备来记录训练数据呢,不管是运动的时长、距离,还是心率的波动,都是我需要关注的。

经验

在为自己购买智能手环或手表设备之前,我已经给家里人买过几款智能手环以及试用过几款智能手环或手表:

  • 荣耀手环 4
  • 米动手表青春版
  • 米动手环
  • Amazfit 智能运动手表 2S

作为一个戴配饰会死星人,我完全不能接受特别大特别重的智能手表类设备,特别是作为一个码农,在敲键盘的时候还有一个手表来哐当哐当敲着键盘托的位置,简直难以忍受。

在试用了 Amazfit 智能运动手表 2S 之后,就直接放弃了使用手表类设备的念头。秋天已经穿上长袖甚至外套,一个又厚又宽大的手表简直是穿衣脱衣的巨大障碍。

在试用了米动手环之后,发现那个屏幕的表现实在是有些差劲,颗粒感太明显,放弃。

米动手表青春版其实感受还不错,反显常亮表盘,日常使用足够,续航足够长,还带 GPS,并且本身重量体积很轻很薄,但是在使用过小米运动这个 App 之后,完全没有想要使用的想法。

荣耀手环的屏幕很惊艳,几乎没有颗粒感,但是华为运动健康 App 也是跟小米运动一样,在运动数据记录方面不够专业。

并且在使用过程中,不管是小米运动,还是华为运动健康,甚至于苹果的 Health App,都没有能提供一个运动记录的详细数据,以及提供一个除了手机之外更方便查看运动记录的 Web 或者桌面 App。

选择

作为一个 Garmin 老用户,这个时候自然会想到在运动设备领域足够专业的 Garmin 有没有提供什么设备可供选择。

在选择设备的时候,有几个功能点是我需要考虑的:

  • 续航能力
  • 是否支持 GPS
  • 是否支持全天心率监测
  • 是否防水
  • 是否支持游泳或力量训练
  • 佩戴是否舒适

在 Garmin 的运动休闲分类中挑了好久之后,找到三个备选:

  • vivosmart 4:7 天续航,无 GPS,带血氧监测,大号重 21.5g
  • vivosport:7 天续航,有 GPS,大号重 27g
  • vivoactive HR:8 天续航,有 GPS,重 47.6g

这几个设备续航都不错,并且都有全天心率监测,都有防水能力。

在纠结于 vivosport 和 vivosmart 4 的最后,考虑到多数时候可能并不需要 GPS 功能,在开启 GPS 的时候续航都不会太长,并且 vivosmart 4 发布更晚,买新不买旧,入手 vivosmart 4。

至于 vivoactive HR,手表造型 + 太重还是放弃了,但是屏幕比较并且是方形的比较符合我的口味,还是在闲鱼入手了一个备用在需要使用 GPS 的场合。

佩戴

在 vivosmart 4 到手之后,佩戴的前几天没有找到合适带扣位置,适应了几天,在找到合适的位置之后,还是比较舒适和方便的。

并且 vivosmart 4 的体积和重量都比较小,在睡觉的时候并不会特别感受到手腕上有一个手环佩戴,相比之前戴着 vivoactive HR 睡觉的时候感受要好很多,佩戴 vivoactive HR 睡觉的时候总感觉有一个东西很硌手。

续航

在开启全天心率监测 + 睡眠血氧监测 + 每天运动一小时,vivosmart 4 差不多还能有 4 天左右的续航,相当满意了。

并且 vivosmart 4 的充电器是一个弹簧充电夹,不像 vivoactive HR 是个硬质充电夹,很方便就可以夹上充电,2 小时即可充满电,完全可以在回家休息的间隔将电充满。

Garmin Connect

Garmin Connect

在最初列出备选的时候,就是因为很久以前已经用过 Garmin 310XT,对 Garmin 设备所能记录的数据,和 Garmin Connect 上所能展现的数据详实程度感到相当满意,这才是一个专业运动设备厂商应该提供的功能。

同时在试用了 Garmin Connect Mobile 之后,对小米运动、华为运动健康这些一不提供 Web界面、二不能导出数据、三竟然应用里还有广告的 App 简直难以忍受。

Garmin Connect 可以算是一个纯粹的运动设备 App 了,所有界面都是针对健康数据、运动数据,各种运动记录里面的数据、曲线都很详实,这样在我使用这个 App 的时候,可以给我一种我很专业的感觉 🙈。

同样,vivosmart 4 作为一个使用 BLE 的设备,同步数据需要使用 Garmin Connect Mobile + 手机蓝牙来将手环中的数据同步到服务器,如果不是经常打开 App 的话,可能会导致时间太久之后数据丢失,这不得不让我怀念 Garmin 310XT 使用 ANT+ 同步数据,只需要有一台常开的电脑加上 ANT+ Stick 就可以实现回到家自动同步数据了。

但是为了体积、重量、续航这些因素,也只能接受这个缺点了。

全天监测

vivosmart 4 支持全天心率监测,并且也支持异常心率提醒,可以设定在没有运动的时候心率超过某个值通过震动来发出提醒。当然我觉得全天心率监测并没有什么很大的用途,只是偶尔可以回顾一下一天的心率波动范围。

另外这个手环还支持睡眠监测,通过设定大概的入睡时间和醒来时间,手环可以自动记录这段时间中的睡眠质量。

入睡和醒来时间的设定并不意味着只能记录那两个点之间的数据,而是通过这个范围来确定睡眠时间的范围,只有在这个范围内的才能生成睡眠质量报告。这也就意味着它并没有办法记录像午睡这样的小憩类型的睡眠数据。

在对比过 vivosmart 4 和 Withings Aura Sleep Monitor 的数据之后,发现 vivosmart 4 的监测数据应该还行,可以作为自我睡眠质量的一个相对参考。

另外 Garmin 还在这类手环中搞出一个 Body Battery 的概念,通过监测睡眠和运动数据,计算出身体能量的增长和消耗,得出一个当前的电量值,可以一定程度上反应当前身体是否疲劳。

当然这只是一个参考值,权当娱乐就好,不用太在意。

Body Battery

力量训练

在之前挑选手环的对比过程中,发现了 vivosmart 4 支持力量训练模式,这个对于已经预期准备在有氧之后加上力量训练的我,还是非常有用的。

vivosmart 4 可以根据内置传感器来自动判断当前力量训练的动作是什么,例如深蹲、卧推等动作都还算能比较准确的识别出来,并且可以自动记录次数。

另外一个比较方便的一点,就是力量训练模式的分组功能,在每结束一组训练之后,可以显示休息时间,这样可以很方便的控制每组动作之间的休息间隔。

对于训练中的心率监测、心率提醒等功能,也算是基本能力了。

虽然 vivosmart 4 本身对于力量训练提供自动分组功能,可以不需要手动操作自动根据传感器判断当前是否进行下一个动作,但是在使用过期中发现,这个识别可能不是很精确,或者说我的动作不够精确,导致经常会出现识别错误,因此在使用过程中还是主要使用手动分组。

力量训练

MoveIQ

现在 Garmin 新款的手环或者手表,都支持 MoveIQ 功能,可以在不开启运动模式的情况下,自动识别当前的运动,例如步行跑步等。

这个功能吧,说有用也有点用,比如偶尔出门步行,但是并不会记着要在手环上开启步行模式,在连续步行超过 10 分钟之后,它就会自动打开步行运动模式,并且在停止运动之后,自动生成一条运动记录。像步行也可以根据步长估计出步行的距离,以及记录运动过程中的心率变化,配速等信息。

但是偶尔它的识别也是有问题的,可能已经运动很久了,也识别不出来,另外这种并不是计划中的运动,有没有记录可能问题也不是特别大。

只能说这是一个锦上添花的功能。

软件 BUG

在使用 vivosmart 4 过程中,偶尔还是会碰到固件出现 bug 的情况,比较常见的一个问题就是在开始训练时,如果开启了心率提醒,并且操作比较快,有一定概率会出现卡死在时间界面,按任何键都只会循环当前界面,无法开始,也无法结束,这个时候只能将它接到充电器上,开始充电时,感觉它应该是做了一个重启的操作,这个时候就可以正常使用了。

怎么说呢,很多时候我只能尽量等它的提示动画走完了再双击开始,避免触发这个 bug。

尽管在网上论坛里看到了说 Garmin 软件质量比较差,但是我觉得就我碰到的情况来说,应该还算是能接受的,毕竟我不是重度用户。

结论

就目前已经使用了半年的体验来看,我觉得 Garmin vivosmart 4 还是能比较满足我的各种需求,Garmin 的软件虽然评价不高但是足够专业,这个手环常用的电话、短信、通知提醒功能也都不缺少,Garmin Connect Mobile 又足够清晰好用。

如果你也是一个器材党、数据党,如果你也准备开始运动,可以考虑去 Garmin 专卖店试用一下。

购买链接

佳明天猫官方旗舰店:https://s.click.taobao.com/IA9ECBw (此链接带返利,如介意可自行搜索)

玩玩智能家居8:搭建基于 Grafana 的环境数据看板

在之前的文章 《玩玩智能家居4:InfluxDB & Grafana》 已经介绍了怎么将 Domoticz 中采集到的数据存储到 Influxdb,以及使用 Grafana 来查看数据,但是这样只有一个两个数据,并不能很方便的对整个家里的环境数据有个快速了解。

Grafana 提供了丰富的面板组件,可以以各种形式来展示数据,例如文本和曲线图,而且也可以很方便地自定义阈值,对于数据的不同数值显示不同的颜色,或者不同的背景颜色,这样便于了解当前数据是否处于能接受的范围内。

借助于 Grafana 这些组件,就可以很方便的搭建一个属于自己的家庭环境数据看板了。

继续阅读 »

玩玩智能家居7:Domoticz 中的 Events

在使用 Domoticz 的过程中,为了避免让 Domoticz 只是成为一个手机上的遥控器,就需要根据生活使用场景去定制一些自动化的规则,例如在天黑回家时自动打开灯,又或者是在睡觉之后自动关闭不必要的灯,在这个时候,就需要使用 Domoticz 的 Events 系统了。

Domoticz 的 Events 支持很多种类语言的编码,其中还包括图形化的配置工具 Blockly。

当然这里并不会去介绍 Blockly 的配置方式,因为使用编码的方式可以得到更细粒度的控制,以及更自由的场景条件控制。

这里主要介绍一些处理事件时的技巧和思路。

时间差处理

在事件处理过程中,最重要的一件事就是判断事件发生的时间与当前时间的时间差,通过这个时间差,可以很方便的根据不同的时间差来达到不同的目的。

now = os.date('*t')

function timedifference (s)
  year = string.sub(s, 1, 4)
  month = string.sub(s, 6, 7)
  day = string.sub(s, 9, 10)
  hour = string.sub(s, 12, 13)
  minutes = string.sub(s, 15, 16)
  seconds = string.sub(s, 18, 19)
  t1 = os.time()
  t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
  difference = os.difftime (t1, t2)
  return difference
end

直接使用 timedifference(otherdevices_lastupdate['设备名称']) 就可以得到当前距离这个设备状态最后变化的时间了。

继续阅读 »

玩玩智能家居6:接入杜亚电动窗帘

之前还没有玩上 Domoticz 的时候,家里全套系统都是用的 Broadlink,在买窗帘的时候也想着要买电动的,因此很自然的买了支持 Broadlink 的杜亚窗帘电机,可以方便地与 Broadlink 的传感器进行联动。

后来用了 Domoticz,但是 Broadlink 的系统并没有开放 API,想要接入 Domotiz 系统就比较麻烦了。在网上看了一堆帖子之后,发现可以通过分析窗帘电机遥控器信号,然后自己使用 433M 射频模块来自己控制。

Controlling Blinds.com RF Dooya Motors with Arduino and Vera 这篇帖子中提供了一个 PDF,详细介绍了如何嗅探信号,以及杜亚窗帘电机遥控器信号的格式。

准备材料

发射和接收 433M 射频信号需要的材料很简单,只需要 433M 发送和接收模块就可以了,不超过 5 块钱。

再加上需要接入 Domoticz,加个 NodeMCU,完事。

嗅探信号

首先需要嗅探一下窗帘遥控器发出的信号,如果有专业的机器的话可以直接去嗅探 433M 射频信号,如果没有的话,也可以使用 433M 模块自制一个。

根据前面提到的 PDF 中介绍的方法,将一个 433M 模块与 3.5mm 耳机线连接,然后插在电脑上。

因为 MacBook Pro 没有自带专用麦克风插孔,因此还得去买一个 USB 转耳机接口模块,方便接入。另外为了给 433M 模块供电,直接把模块的 VCC 跟 GND 跟 NodeMCU 的 VIN 和 GND 在面包板上连接起来了。

接着就可以使用 Audacity 进行录音操作了:

找到有规律的波形之后放大,开始数格子:

数完格子就知道一个遥控器指令的格式了。

指令格式

一个完整杜亚窗帘遥控器指令是 32 位 + 16 位或 8 位命令位,前 32 位可能包含了窗帘 ID 信息,不过我并没有仔细研究,每个遥控器的都不太一样,也不用太纠结。

例如一个打开窗帘的指令可以像下面这样:

10111101010000011001101101100001 00010001 00011110

每个指令需要发送 6 遍,在发送指令之前,还有一个间隙指令,需要发送三遍。

其实理论上,杜亚窗帘电机使用固定码,并不需要知道指令格式是什么意义,只需要按采集到的波形原样重放就可以了。

发射信号

有了波形,有了指令,就很方便的去重放射频信号了,反正也没什么加密措施,窗帘电机是不认识是由遥控器发出的指令,还是由 433M 模块发出的指令。

把 433M 射频发射模块与一个 NodeMCU 相连,然后使用之前帖子里提供的 BlindsVera.ino 中的代码就可以发射信号了。天线可以简单的使用一根 16cm 左右的导线。

BlindsVera.ino 中的代码都有注释,下面说说关键的几部分。

定义发送管脚,以及指令 1 和 0 所占用的时间

#define SEND_DATA 3 //Data pin for RF Transmitter
#define ZERO_HIGH 395 //Delay for the high part of a 0 in microseconds
#define ZERO_LOW 687 //Delay for the low part of a 0 in microseconds
#define ONE_HIGH 750 //Delay for the high part of a 1 in microseconds
#define ONE_LOW 333//Delay for the low part of a 1 in microseconds

指令中的标准位

unsigned char standardBits1 = 0b00000111;
unsigned char standardBits2 = 0b01110000;
unsigned char standardBits3 = 0b01010101;
unsigned char standardBits4 = 0b11001011;

BlindsVera.ino 中把窗帘 ID 与标准位分离了,但是在实际使用中,其实标准位并不统一,每个遥控器的都会不一致,因此在实际使用中需要把这里的标准位替换为实际的标准位,也就是数格子得到的指令中的前 28 位。

发送指令

void separatorDelay(boolean upDown);
void endDelay();
void blindAction(int c, int a);

最后就是发送指令了,根据之前采集的格式,按顺序发送相应的指令就可以了。

换个思路

杜亚窗帘电机上本身已经带了有线接口,可以直接使用 NodeMCU+继电器的方式来控制,不用去模拟射频信号,每个电机都是使用一样的线序,处理起来更简单一点。

更好的选择

呃,小米的窗帘电机?也许 miio 或者 python-mirobo 会支持吧,相对而言小米还是开放一些的。

参考资料

  1. Controlling Blinds.com RF Dooya Motors with Arduino and Vera
  2. 智能家居:窗帘篇

玩玩智能家居5:DIY水浸传感器

之前总是担心厨房水槽下水管会漏水,所以直接用雨水传感器做了一个水浸传感器,这样在漏水的时候,就可以直接收到通知,从而及时去检查并修复下水管漏水问题。

要 DIY 一个水浸传感器还是很简单的,只需要一个雨水传感器和一个 NodeMCU 就可以了。

雨水传感器

给 NodeMCU 刷上 ESPEasy,配置一个 Switch 设备,将 GPIO 设置为 NodeMCU 与雨水传感器 DO 针脚连接的 IO 就可以了。

然后再在 Domoticz 中配置好一个 Virtual Sensor,类型改为 Switch 就可以了。

报警声音

有些时候推送通知会比较慢,又或者手机不在身边,那么是否可以直接在 NodeMCU 这一端直接使用声音报警呢?这很简单,加个蜂鸣器模块,再写点代码就好了。

先给 ESPEasy 写个蜂鸣器插件,关键代码就是使用 Arduino 的 tone 函数了:

#define Plugin158_Do 262
#define Plugin158_Re 294
#define Plugin158_Mi 330
#define Plugin158_Fa 349
#define Plugin158_Sol 392
#define Plugin158_La 440
#define Plugin158_Si 494

static int Plugin158_TonesFreq[] = { Plugin158_Do, Plugin158_Re, Plugin158_Mi, Plugin158_Fa, Plugin158_Sol, Plugin158_La, Plugin158_Si };

static void Plugin158_PlayTones(int taskIndex) {
  int pin = Settings.TaskDevicePin1[taskIndex];

  char *tonesStr = "616161";

  pinMode(pin, OUTPUT);
  int len = strlen(tonesStr);
  if (Plugin158_TonesPlayingCharIndex < len) {
    char c = tonesStr[Plugin158_TonesPlayingCharIndex];
    int index = c - '0';
    if (index > 0 && index <= 7) {
      tone(pin, Plugin158_TonesFreq[index]);
    } else {
      noTone(pin);
    }
  }

  Plugin158_TonesPlayingCharIndex++;
  if (Plugin158_TonesPlayingCharIndex >= len) {
    Plugin158_TonesPlayingCharIndex = 0;
  }
}

为了能在有漏水时,马上报警,或者为了在没有网络情况不好时也能马上使用声音报警,需要在 ESPEasy 的本地规则里检测到漏水时来报警。

要实现这个功能,只需要使用 ESPEasy 的 Rules 功能,在 Rules 里检测到有漏水时,直接调用蜂鸣器插件进行报警:

on WATER#VAL=1 do
    buzzer,2,1
endon
on WATER#VAL=0 do
    buzzer,2,0
endon

更好的选择

当然,如果已经有小米网关了,可以直接购买 Aqara 水浸传感器,使用电池,方便部署,还美观 🙈。

而且小米的东西也可以不借助于 Domoticz 直接使用,可以将水浸传感器设置自动化,触发时直接使用小米网关播放警报音。

参考资料

  1. Domoticz
  2. Arduino – Tone

玩玩智能家居4:InfluxDB & Grafana

在接入了很多传感器到 Domoticz 之后,终于可以全面监控家里的各种环境参数了,例如温度、湿度、PM 2.5、二氧化碳浓度等等。

Domoticz 虽然已经自带了传感器数据日志,但是一来详细数据最多只能保存七天,二来只能单独查看每个传感器的数据,而不能将多个传感器数据放在一起对比查看,所以就需要使用其他方式去保存和展示传感器历史数据。

InfluxDB

InfluxDB 是一个时序数据库,很方便用来保存时间序列数据,而各种传感器数据其实就是一个时间序列化数据,InfluxDB 的介绍页面也说了很适合于 IoT Sensors 数据的保存。

使用 InfluxDB 最方便的方式就是用 Docker 了,直接在 DSM 的 Docker 中添加 influxdb 镜像,然后启动一个容器就可以了。

当然这里要记得添加一下端口映射,后面在配置 Domoticz Data Push 的时候需要用到。

Domoticz Data Push

部署好了 InfluxDB,就可以在 Domoticz 里面配置把接收到的传感器数据同时推送到 InfluxDB 中保存了。

Domoticz 提供了两种方式可以用来将传感器数据推送到 InfluxDB 中,一种使用 HTTP 调用 InfluxDB 的 HTTP API,还有一种是直接使用 Domoticz 内建的 InfluxDB 支持。

使用内建 InfluxDB 支持

使用内建 InfluxDB 的功能很简单,直接填写好 InfluxDB 服务器的 IP 和端口以及数据库名称就可以了

使用 InfluxDB HTTP API

使用 HTTP API 来向 InfluxDB 来写入数据稍微麻烦一点,需要自己定义一下发送数据的格式,但是其实这样更有利于控制写入 InfluxDB 中数据的名称。

URL 需要填写 InfluxDB 的 API 地址:

http://192.168.9.16:9800/write?db=domoticz&u=root&p=root&precision=ms

其中:

  • 192.168.9.16:9800 需要替换为实际的 InfluxDB 服务器地址和端口
  • db=domoticz 需要将数据库名称替换为实际的数据库名称

Data 填写:

device_%V value=%v %t3

配置需要 Push 的数据

在设置完 InfluxDB 推送,还需要选择需要推送哪些传感器的数据到 InfluxDB,这个在 Data Push 页面中直接选择添加就可以了。

Grafana

有了数据,就可以来展示了。Grafana 是一个很好的展示时序数据的工具,它直接支持读取 InfluxDB 的数据,可以提供多种形式的展示方式,例如曲线图、柱状图等。

Grafana 同样可以直接使用 Docker 来安装部署。

在 Grafana 中配置好 InfluxDB 数据源,就可以开始使用 Grafana 的面板来展示数据了。

在 Dashboard 中创建一个 Graph Panel,然后直接选择一下需要显示的数据字段,填一下采样的时间间隔,就可以显示出好看的曲线啦。如果需要对比多个数据,可以直接添加,选择不同的字段就可以了。

Grafana 还有其他很强大的图表显示功能,这个就可以根据自己的需要去组合排布,也可以创建多个 Dashboard 来展示不同类型的数据。如果有条件,还可以用一个 iPad 来展示 Dashboard,可以直接看到数据而不用去电脑上打开网页了。

参考资料

  1. Influxdb
  2. Grafana
  3. Domoticz HTTP Link

— EOF —

玩玩智能家居3:PlatformIO

ESPEasy 虽然方便,但是毕竟很久没有维护了,里面对硬件的支持也不是很完全,并且在使用有些模块时,与 Domoticz 对接可能会有一些问题,例如 CO2 传感器在发送数据到 Domoticz 时,发送的数据字段就不正确。

在这个时候就需要自己来修改 ESPEasy 代码,重新编译并烧录到 NodeMCU 中,而修改代码就需要用到 IDE 了。ESPEasy 是一个 Arduino 项目,自然用 Arduino IDE 来开发是最直接的。

但是 Arduino IDE 是一个相当古老的程序了,虽然版本号更新到了 1.8,但是在使用的时候有很多功能都不够完善,例如代码自动补全、符号定位、语法着色等。

这个时候就在网上找到了 PlatformIO 这个项目,它提供了基于 Atom 或者 Visual Studio Code 的 IDE 项目 PlatforIO IDE。

PlatformIO IDE

要安装 PlatformIO IDE 很简单,在 Atom 的设置中打开 Packages,直接搜索 platformio ,安装platformio-ide 扩展即可。

项目开发

安装完 PlatformIO IDE,就可以开始用 Atom 来开发 Arduino 项目啦,使用 Atom 侧边工具栏里面的 Home 图标即可打开 PlatformIO IDE 首页。

如果原来的项目是纯 Arduino IDE 项目,即项目文件都在一个文件夹并且扩展名为 .ino,可以使用 PlatformIO 的导入 Arduino 项目功能。PlatformIO IDE 会将项目文件组织方式转换为 PlatformIO 项目格式,这个转换操作会将所有源代码文件移动到 src 目录中,并且给每一个 .ino 文件头部加上 include <arduino .h>

导入完成之后,就可以直接使用 Atom 编译固件并烧录到 NodeMCU 上了。

串口监视器

当然 PlatformIO IDE 也提供了串口监视器功能,直接在左侧工具栏中找到插头图标,点击之后就会出现串口选择,选择 NodeMCU 对应的串口设备以及波特率,即可在终端中看到 NodeMCU 串口输出的数据。

PlatformIO 平台

当然 PlatformIO 并不是只有 IDE 功能,它同样还有库管理功能,在 PlatformIO 的平台上有超过 1800 多个开源库可以使用,进入 PlatformIO IDE 主页之后,在左侧菜单中找到 Libraries,就可以快速添加开源库到 Arduino 项目中。

使用 Arduino IDE 中安装的库

当然在 PlatformIO 中也可以使用在 Arduino IDE 中安装的开源库,因为有一些库可能只上传到了 Arduino 的平台,而没有提交 PlatformIO 生态。

要在 PlatformIO 项目中使用 Arduino IDE 安装的开源库,只需要在 platformio.ini 这个配置文件中加下以下两行就可以了:

[platformio]
lib_dir=~/Documents/Arduino/Libraries

参考资料

  1. PlatforIO
  2. PlatformIO IDE for Atom
  3. PlatformIO Libraries

— EOF —

玩玩智能家居2:ESPEasy

1. ESP8266

ESP8266 是乐鑫推出的一款低功耗高集成度的 Wi-Fi 芯片,价格低,I2C、SPI、ADC 等接口一应具全,非常适合作为个人 DIY 的单片机使用。

2. NodeMCU

NodeMCU 是基于 ESP8266 ESP-12E 做的一个开发板,集成了 Micro USB 输入,4M Flash,开发时使用起来更方便。

NodeMCU 默认是使用 Lua 作为开发语言的,但是借助于 ESP8266 Arduino 项目,就可以拿 NodeMCU 当 Arduino 开发板来使用了,可以直接使用 Arduino IDE 或者 PlatformIO 来开发。

3. ESPEasy

ESPEasy 是 LetsControlIt.com 开发的一个开源 MCU 固件,专门用于 IoT 设备。通过 ESPEasy,可以很方便地使用 ESP8266 系列 MCU 来组成家庭传感器网络,几乎不需要编写代码就可以实现。结合一些开源 Home Automation System,就可以实现家庭设备的自动化。

3.1 多种服务器支持

ESPEasy 内置了多种开源 Home Automation System 的支持,例如常见的有:

  • Domoticz
  • ThingSpeak
  • OpenHAB

在 ESPEasy 中,只需要配置 Home Automation System 的服务器地址端口等,就可以自动将 ESPEasy 采集到的数据发送到服务器,并且可以很容易定制发送时间间隔,格式等。

3.2 插件功能

在 ESPEasy 中,对于各种传感器的支持都是通过插件的方式来实现的,在官方固件中就已经集成了相当多的传感器等元件的支持。

另外还有一个 ESPEasyPluginPlayground 中有爱好者编写的试验性的传感器插件。

对于有能力开发的人来说,碰到官方固件没有支持的传感器或元件,完全可以自行编写插件来支持。

3.3 事件规则

Rules 在 ESPEasy 中是一个试验性的功能,需要单独在 Tools > Advanced 中开启。

通过 Rules 功能,就可以方便在一个 ESPEasy 节点上实现事件处理而不需要通过中心化的 Domoticz 去处理事件联动什么的,避免因为中心服务器失效而导致类似警报功能失效的问题。

例如我做了一个厨房漏水检测,希望在检测到漏水时直接通过蜂鸣器发现警报声,而不是触发到 Domoticz 中的 Switch 值改变,再由 Domoticz 去发出警报声,就可以直接在 Rules 中编写相应的规则来实现。

on WATER#VAL=1 do
    buzzer,2,1
endon
on WATER#VAL=0 do
    buzzer,2,0
endon

3.4 设备配网

对于一个 ESPEasy 节点来说,如果在固件默认配置好的 Wi-Fi 环境中,那么它会自动连接上 Wi-Fi 网络,但是如果移动到了一个陌生的 Wi-Fi 环境中,那么如何让它连接上 Wi-Fi 网络就是一个问题了。

很方便的是,ESPEasy 本身提供了 AP 方式的配网功能。

在无法连接到 Wi-Fi 网络时,ESPEasy 会将 ESP8266 的 Wi-Fi 工作模式切换到 AP Station 方式,提供了一个名称为 ESP_0 这样形式 SSID 的 Wi-Fi 网络,连接到这个网络,访问 192.168.4.1 就可以进入 ESPEasy 的配置界面了,在这里,可以配置真正实际使用时的 Wi-Fi 网络 SSID 和密码。

4. ESPEasy Plugin

ESPEasy 的 Plugin 机制是一个很有用的东西,对于我这样的 Arduino 初学者来说,它可以解决我相当一部分开发上的问题,例如配置的保存,系统架构的设计,定时器的使用等等。

4.1 Task Pin

对于 ESPEasy Plugin 来说,它的主要职责就是去与传感器沟通,而与传感器沟通最主要的方式就是通过针脚来通信了。ESPEasy Plugin 默认支持 Single Pin,Dual Pin,I2C 等方式来与传感器通信。

当然,这个只是用来保存插件与传感器通信所用的针脚,以及用来决定在 Web 界面上配置传感器时提供什么样的形式去给用户选择,真正如何与传感器通信还是需要由插件的代码去实现。

4.2 Configuration

ESPEasy Plugin 默认提供了三种类型 int16、float 以及 long 自定义配置存储项,其中 int16 最多 8 个,float 和 long 最多 4 个。

另外,ESPEasy Plugin 还为每个插件准备了 512 字节的自定义配置存储区域,在这 512 字节中,可以根据自己的需要存储例如字符串等配置信息。在 ESPEasy 自带的 OLED 插件中,就是使用了这 512 字节来存储需要显示的字符串信息。

4.3 Timer

定时器是个好东西,但是我不会用。不过有了 ESPEasy Plugin,只需要在 PLUGIN_ONCE_A_SECOND 或 PLUGIN_TEN_PER_SECOND 写代码就行了,每秒一次还是每秒十次任君选择。想要自定义时间?加个变量累加一下触发次数就可以实现任意 100 毫秒倍数时间的定时器了。

5. PlatformIO

ESPEasy 是一个很老的项目,可能以前是用 Arduino IDE 开发的,虽然 Arduino IDE 是一个好东西,但是毕竟比较不现代,在使用过程中还是有各种不便。

而 PlatformIO IDE 就比较现代了,这是一个基于 Atom 实现的跨平台 IDE,支持多种开发平台,例如 Arduino、mbed 等。

当然 PlatformIO 对我最多的吸引力是它比较完善的项目文件列表、语法颜色以及自动补全功能。Arduino IDE 与之相比就像是在用记事本在写代码。

PlatformIO 是直接可以兼容 Arduino 项目代码的,因为从 Arduino IDE 切换完全没有压力,并且在打开项目时也可以保持与 Arduino 项目的兼容性,这样如果有一些特殊需求也可以直接用 Arduino IDE 来打开项目来开发。

6. Plugins

6.1 MH-Z19

MH-Z19 是一款国产的二氧化碳传感器,量程为 0~5000ppm,精度为 50ppm+5% 读数值,指标和进口 SenseAir S8 差不太多,但是价格只需要三分之一,相当实惠。

在实际使用过程中,发现 MH-Z19 的数据也还算稳定,与 SenseAir S8 并没有太大差距,与 Netatmo Weather Station 的数据也还算符合,因此用来作为看室内二氧化碳浓度变化趋势是一个不错的选择。

6.2 PMS5003

PMS5003 是攀腾科技出的一款激光 PM 2.5 颗粒物传感器,便宜又好用,使用 pms5003 这个库可以很方便的读取数据,然后发送到 Domoticz 上的 Custom Sensor 设备,可以方便的追踪家里的 PM 2.5 浓度变化,或者来检测空气净化器的净化效果。

6.3 Switch

很多一些通断性质的传感器,可以直接使用 Switch Plugin 来读取状态,并实现一些相关的联动事件处理。

例如检测漏水,可以直接在淘宝上购买雨水传感器模块,它有一个数字输出 DO,有水时就会输出低电平,检测到低电平时就可以通过蜂鸣器发出警报提示检查漏水情况了。

7. 参考资料

  1. ESPEasy Wiki
  2. ESP8266
  3. Wikipedia: ESP8266
  4. NodeMCU
  5. PlatformIO
  6. GitHub: ESPEasy
  7. GitHub: ESPEasyPluginPlayground
  8. GitHub: pms5003

未经许可,禁止转载

— EOF —

玩玩智能家居1:Domoticz

1. 什么是 Domoticz

第一次知道 Domoticz 是在 smzdm 上的一篇原创文章《开源IoT平台domoticz与百搭wifi模块esp8266 篇三:空气站 Weather Station》里,以及知道了 ESP8266 模块这个好东西。

Domoticz 支持众多 USB 以及串口设备,可以通过将 Domoticz 安装在树莓派上,直接读取和操作连接在树莓派上的设备,例如 RFLink 或者 I2C 接口的 BME280 传感器。

当然,Domoticz 还支持通过局域网控制的设备和有网络 API 的设备,例如小米网关或者 Netatmo Weather Station。

2. 主要功能

传感器

Domoticz 可以直观的展示各种传感器状态以及历史,常用的有温度、湿度、二氧化碳浓度等。

对于 Domoticz 没有内置类型的传感器,也可以使用 Custom Sensor 来展示,可以自定义单位,同样可以查看历史。

开关

对于灯、遥控器等,都可以通过 Domoticz 开关类型设备来实现控制。对于遥控器,Selector Switch 是个好选择。

事件

Domoticz 内建了事件系统,对于事件的处理,简单的方法可以使用 Blockly 图形化编程来实现各个传感器和设备间的联动,如果有复杂逻辑,可以直接使用 Lua 脚本来处理。这给用户带来更大的自由度。

3. 对比其他 Home Automation System

当然,开源 Home Automation System 有很多,但是对比使用了一下其他系统之后,觉得相对而言还是 Domoticz 更简单易用一些。

openHAB

openHAB 是一个使用 Java 编写的开源 Home Automation System。它也支持相当多的设备,很容易配置连接 Amazon Dash Button、Philips Hue 等设备,还支持连接 Kodi 这个多媒体中心。

但是在使用的时候,openHAB 添加设备并不是特别直观,也没有弄明白自己怎么样去添加一个自定义的传感器设备。另外怎么查阅传感器历史数据也没有找到入口。

Home Assistant

Home Assistant 是一个开源的,使用 Python 3 编写的 Home Automation Platform。

对于我来说,最不喜欢 Home Assistant 的一点就是,它的设备都是需要使用 YML 配置文件的方式来配置,这在使用过程中感觉不是很方便。

4. 优缺点

对于我来说,第一步需要做的是使用 ESP8266 构建家庭传感器网络,在对比了几个系统之后,最终选择 Domoticz 作为 Home Automation System。

Domoticz 的优点

  • 直接在网页界面配置设备
  • 很容易添加自定义传感器设备
  • ESPEasy 内置 Domoticz 数据传送支持
  • Lua 事件处理比较强大

Domoticz 缺点

  • 界面不够现代,虽然 elemental 主题稍微好一点
  • 官方 App 功能不够完全
  • Homebridge 插件 homebridge-eDomoticz 功能不完善

有些缺点其实也是可以克服的,官方 App 可以用网页版代替,Domoticz 的主题本身带有移动设备支持,而 homebridge-eDomoticz 插件的问题,就只能靠自己改代码来完善了。

5. 安装

Domoticz 官方提供了 Windows、macOS 以及 Linux 的二进制文件,对树莓派也提供了编译好的二进制包,所以安装起来还是很方便的。另外官方还提供了树莓派和 Ubuntu 的一键安装脚本,比使用压缩包更省事。

因为不想另外找个树莓派或者开一台虚拟机,我就在 DSM 的 Docker 中部署了 Domoticz。Domoticz 的 Image 在 Docker Hub 上很容易找到。

6. 添加设备

Domoticz 提供了很多类型的硬件,其中一些很便于扩展使用自己的设备。

虚拟设备

在 Hardware 中添加一个 Dummy 的硬件,然后从这个硬件就可以创建各种虚拟传感器了,在 ESPEasy 中可以很方便的更新这些虚拟传感器的数据。

HTTP/HTTPS Poller

使用 HTTPS Poller 这个设备就可以很方便的去拉取一些外部数据来显示在 Domoticz 内部了,比如去获取外部的 AQI 指数。

小米网关

在去年年底,Domoticz 加入了小米多功能网关的支持,通过 Xiaomi Gateway 这个硬件,可以自动的将小米多功能网关的子设备(例如温湿度传感器、门窗传感器、人体活动传感器以及小米智能插座)添加到 Domoticz 中。

7. 事件

借助于 Blockly 或者 Lua,可以很方便地实现家中设备的联动,例如开门时自动打开小米智能插座。

8. 参考资料

  1. 5 open source home automation tools
  2. 开源IoT平台domoticz与百搭wifi模块esp8266 篇三:空气站 Weather Station
  3. openHAB
  4. Home Assistant

未经许可,禁止转载

— EOF —