这是一个odoo与树莓派结合的小实验。

实验目标:

  • 试验树莓派GPIO接口的开关量输入。
  • 试验树莓派与odoo通讯。

 

实验方法:

理想的方法:按一个按钮,树莓派检测按钮动作,然后写一条信息给odoo。

现实的方法:由于没有买按钮,按钮动作就用插拔电线来实现。然后给odoo添加一个产品,产品名称为当前系统时间,以此来验证树莓派与odoo的通讯。

基础知识与必备软件:

树莓派GPIO的知识就不说了,网上多的是。

树莓派与odoo的通讯,在python的程序里,可以使用xml rpc,官方文档在这里:https://www.odoo.com/documentation/master/api_integration.html

如果你在https://pypi.python.org/pypi 搜索odoo,你会发现有个东西叫:OdooRPC

OdooRPC is a Python module providing an easy way to pilot your Odoo servers through RPC.

用这个库可以极大的简化odoo xml rpc编程。非常不错。不过性能挺慢的。

硬件线路:

GPIO 11引脚设置为输出,用来点亮一个LED。

GPIO 13引脚设置为输入,检测按钮动作。(这里我们用电线的插拔来代替)

接线方式参考下图

odoo与树莓派结合的小实验

没有画电路图软件,就不画图了,大家稍微看一下就好了。

程序:

import odoorpc
import time
import RPi.GPIO as GPIO

odoo = odoorpc.ODOO('192.168.1.200')
odoo.login('odoo8','admin','1')
product = odoo.env['product.template']


GPIO.setmode(GPIO.BOARD)
GPIO.setup(11,GPIO.OUT)
GPIO.setup(13,GPIO.IN)

def add_new_product(): 
    timeformat='%Y-%m-%d %X'
    p_name = time.strftime(timeformat,time.localtime())
    product.create({'name':p_name})

GPIO.output(11,False)
while True:
    in_13 = GPIO.input(13)
    if not in_13:
        GPIO.output(11,True)
        while not in_13:
        in_13 = GPIO.input(13) 
        GPIO.output(11,False)
        add_new_product()

如果有单片机基础,就能很快看明白这个程序。

总觉得RPi.GPIO这个库,应该有更好的方式来检测下降沿信息。等我再研究研究。

实验结果:

odoo与树莓派结合的小实验

过段时间,会做一个更大的课题,比这个大很多。敬请期待!