【Python】ラズパイプログラムの関数化メモ

概要

ラズベリーパイでZigBeeデータの送受信などをしている部分のスクリプトは、PYTHONで記述しています。いくつかのルーチンは他でも使えそうなので関数化してみました。

環境

 

今回もpaiza.IOを利用させていただきました。

paiza.IOはとにかくエディターが便利

ideone.comと同じように動作させてみたいプログラミング言語を指定し、コードを入力してすると、WEB上で即座に実行し結果をかえしてくれるサイトですが、直感的でとにかくエディターが使いやすいのです。エラーの発生個所も適切に教えてくれるし断然使い勝手が良いです。

コンソールも用意されています

そして、各言語にそれぞれコンソール画面があるのがまたまた便利です。

なんと、Twitterでプログラムが実行できる

Twitterからもコードを実行できます。「@paiza_run」または「#paiza_run」ではじまるメッセージをツイートすると、実行結果がリプライとして 送られます。リプライの通知を受け取る場合、Twitterの仕組み上@paiza_runをフォローします。

@paiza_run ruby: puts “Hello” + “world”

のように[@paiza_run]+[半角スペース]+[実行したいプログラミング言語]+[コロン(“:”)]+[実行したいコード] という形でツイートすると、結果をリプライとして贈られます。

 

スクリプト

 

2バイトのセンサーデータを有効なビットでマスクする


def mask2byteBinData(hi_val,low_val,maskdata):
    return (((hi_val << 8) | low_val) & maskdata)

 

Arduinoから受信したデータを浮動小数点型に変換する


# Arduinoから受信したデータを浮動小数点型に変換する
def calc_temperture(temp):
    return ((temp - 2000.0) / 100.0)

 

同じデータセットのグローバル配列変数をクラス化する


#coding:utf-8
import json, urllib2
from logging import getLogger, StreamHandler, DEBUG


# Arduinoから受信したデータを浮動小数点浮動小数点型に浮動小数点型に変換する
def calc_temperture(temp):
    return ((temp - 2000.0) / 100.0)
    
class array:
    #
    def __init__(self,cnt):
        self.counter=0
        self.startVal=0
        self.sumVal=0
        self.maxcount = cnt             #最大個数
        self.clearVal()            #n個目の配列を初期化する
    def increment(self):
        self.counter += 1
        return self.counter
    def set_inival(self,val):
        self.startVal = val
    def addon(self,val):
        self.sumVal += val
    def showcount(self):
        return self.counter
    def showinitval(self):
        return self.startVal
    def showsum(self):
        return self.sumVal
    def clearVal(self):
        self.counter = 0         #n個分の配列を初期化する
        self.startVal = 0     #n個分の配列を初期化する
        self.sumVal = 0           #n個分の配列を初期化する
        return
    def calc_average_temp(self):
        return float(self.sumVal)/float(self.counter)
        
if __name__ == '__main__':
    logger = getLogger(__name__)
    handler = StreamHandler()
    handler.setLevel(DEBUG)
    logger.setLevel(DEBUG)
    logger.addHandler(handler)
    logger.debug('hello')        

    
    pack = {} 
    pack[0] = array(6)
    pack[1] = array(6)



    
    #テスト
    for i in range(0,3):
        pack[0].addon(10)
        logger.debug(pack[0].showcount())
        logger.debug(pack[0].showsum())
        if(pack[0].increment()>=pack[0].maxcount):
            logger.debug("average="+str(pack[0].calc_average_temp()))
            pack[0].clearVal()
        
    for i in range(0,6):
        pack[1].addon(10)
        logger.debug(pack[1].showcount())
        logger.debug(pack[1].showsum())
        if(pack[1].increment()>=pack[1].maxcount):
            logger.debug("average="+str(pack[1].calc_average_temp()))
            pack[1].clearVal()

 
 
 

参考

 

  1. ログ出力のための print と import logging はやめてほしい
    http://qiita.com/amedama/items/b856b2f30c2f38665701

Leave a Reply

Your email address will not be published.