Raspberry Pi + WebIOPi + PCA9685(I2C PWM) with Python Script

WebIOPi で PCA9685 を使って PWM 生成の試験を行っているが、POST ではなぜか動作させることができないので、Python のプログラムからやってみることにする。
次の手順で環境を整える。
  1. WebIOPi をインストールする
  2. Raspberry Pi + WebIOPi + MCP3008 (SPI ADC) + PCA9685(I2C PWM)
PCA9685 を二つ接続して、32 個の LED を明滅させる。
Python のプログラムはこれ。これは動いている。

#!/usr/bin/python

# coding: UTF-8

 

#from webiopi import deviceInstance

from webiopi.devices.analog.pca9685 import PCA9685

import random

 

class MyWebIOPi(object):

 

    def __init__(self):

        '''

        Constructor

        '''

        # self.pca0 = deviceInstance("pwm0")

        # self.pca1 = deviceInstance("pwm1")

        self.pca0 = PCA9685(slave=0x40, frequency=100)

        self.pca1 = PCA9685(slave=0x41, frequency=100)

        self.ch_list = range(32)

        random.shuffle(self.ch_list)

        self.kMinPWM = 1

        self.kMaxPWM = 4095

        self.vals =

        self.kmms =

        self.mms = []

        for ch in self.ch_list:

            self.vals.append(self.kMinPWM)

            mm = 1.05 + float(ch) / 60.0

            self.kmms.append(mm)

            self.mms.append(mm)

 

    def demo(self):

        for ch in self.ch_list:

            val = self.vals[ch]

            kmm = self.kmms[ch]

            mm = self.mms[ch]

            val *= mm

            if val > self.kMaxPWM:

                val = self.kMaxPWM

                mm = 1.0 / kmm

            elif val < self.kMinPWM:

                val = self.kMinPWM

                mm = kmm

            pwm_percent = val / self.kMaxPWM

            if ch < 16:

                self.pca0.pwmWriteFloat(ch, pwm_percent) 

            else:

                self.pca1.pwmWriteFloat(ch - 16, pwm_percent)

            self.vals[ch] = val

            self.mms[ch] = mm

            

if __name__ == '__main__':

    my_webiopi = MyWebIOPi()

    whileTrue:

        my_webiopi.demo()

        


Apache + wsgi + Python/Pyramid の環境よりも、ぎこちない動きになっている。変なところに時間がかかっている?