12月 27

cy-30在raspberry pi上的调试

使用raspi-config打开i2c接口。
安装i2c工具,
apt-get install i2c-tools

接线如图add管脚悬空。

使用
/dev/i2c-1

执行命令得到cy-30编号为23。
# i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: — — — — — — — — — — — — —
10: — — — — — — — — — — — — — — — —
20: — — — 23 — — — — — — — — — — — —
30: — — — — — — — — — — — — — — — —
40: — — — — — — — — — — — — — — — —
50: — — — — — — — — — — — — — — — —
60: — — — — — — — — — — — — — — — —
70: — — — — — — — —

#!/bin/env python
# -*- coding:utf-8 -*-
# Revision:
# Author:      simonzhang
# Email:       simon-zzm@163.com
# Web:         www.simonzhang.net
# -------------------------------
# http://atceiling.blogspot.co.uk/2017/03/raspberry-pi-gy30.html
import smbus
import RPi.GPIO as GPIO
import time

bus = smbus.SMBus(1)
ONE_TIME_HIGH_RES_MODE_2 = 0x21

def convertToNumber(data):
    return ((data[1] + (256 * data[0])) / 1.2)

def readLight(addr):
    bus = smbus.SMBus(1)
    data = bus.read_i2c_block_data(addr,ONE_TIME_HIGH_RES_MODE_2)
    return convertToNumber(data)

def CY30Data():
    GPIO.setmode(GPIO.BOARD)
    # 初始化
    DEVICE     = 0x23 # Default device I2C address
    num = round(readLight(DEVICE), 2)
    # 输出
    print "%s lx" % num

def main():
    CY30Data()
 
if __name__ == '__main__':  
    main()

cy-30源码

12月 12

mth01-spi 在raspberry pi上的调试

使用raspberry pi 2B主板,python2.7.13,mth01-spi传感器(没有使用reset管脚)。

#!/bin/env python
# -*- coding:utf-8 -*-
# Revision:
# Author:      simonzhang
# Email:       simon-zzm@163.com
# Web:         www.simonzhang.net
# -------------------------------
import RPi.GPIO as GPIO
import time


def MTH01Data():
    GPIO.setmode(GPIO.BCM)
    # 初始化
    GPIO.setup(16,GPIO.IN) # SDA
    GPIO.setup(20,GPIO.IN) # SCK
    GPIO.setup(21,GPIO.OUT) # SC
    # SC高电压,然后低电压输出数据
    GPIO.output(21,GPIO.HIGH)
    time.sleep(0.02)
    data = 0
    datatemp = 0
    GPIO.output(21, GPIO.LOW)
    # 获取数据
    for i in range (32):
        while GPIO.input(20) == 0:
            continue
        datatemp = GPIO.input(16)
        data = data<<1
        if datatemp == 1:
            data = 1+data
        while GPIO.input(20) == 1:
            continue
    # 拉高电压停止输出数据
    GPIO.output(21, GPIO.HIGH)
    GPIO.cleanup()
    # 处理数据 
    data = int(data)
    data16 = hex(data)
    tempTmp = int(data16[2:5], 16)
    humiTmp = int(data16[5:7], 16)
    temp = float(tempTmp-400)/10.0
    humi = humiTmp
    # 输出
    print time.strftime("%b %d %Y %H:%M:%S", time.gmtime(time.time()))
    print temp,'C'
    print humi,'%'
    print "=" * 10

def main():
    while True:
        MTH01Data()
        # 每10秒钟检测一次
        time.sleep(10)
 
if __name__ == '__main__':  
    main()

源码及资料

10月 14

python用echarts生成图表

在Centos7 64位下python2.7.13需要生成图表,开始想使用matplotlib。但是安装后出现问题。
最后决定用echarts生成图表再转成图片。这个想法找到了一个方便的库,详细记录如下。

安装相关库
pip install pyecharts
pip install pyecharts-snapshot

安装html转图片、pdf工具
wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
mv phantomjs-2.1.1-linux-x86_64 /usr/local/src/phantomjs
ln -sf /usr/local/src/phantomjs/bin/phantomjs /usr/local/bin/phantomjs

防止phantomjs转图片乱码,安装字体。
在centos中执行:yum install bitmap-fonts bitmap-fonts-cjk
在ubuntu中执行:sudo apt-get install xfonts-wqy

官方脚本修改如下

#!/bin/env python
# -*- coding:utf-8 -*-

from __future__ import unicode_literals

from pyecharts import Line, Pie, Grid
from pyecharts_snapshot.main import make_a_snapshot

attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 = [5, 20, 36, 10, 10, 100]
v2 = [55, 60, 16, 20, 15, 80]
line = Line("折线图示例")
line.add("商家A", attr, v1, mark_point=["average"])
line.add("商家B", attr, v2, is_smooth=True, mark_line=["max", "average"])
line.render('test.html')

make_a_snapshot('test.html', 'test.jpeg')

通过实验已经成功,但是还有些小问题未解决。

官方文档如下
https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md#%E5%BC%80%E5%A7%8B%E4%BD%BF