{"id":1897,"date":"2018-02-02T14:48:16","date_gmt":"2018-02-02T05:48:16","guid":{"rendered":"http:\/\/bezelie.com\/blog\/?page_id=1897"},"modified":"2018-02-25T14:59:42","modified_gmt":"2018-02-25T05:59:42","slug":"%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e8%a7%a3%e8%aa%ac%e3%80%8cbezelie-py%e3%80%8d","status":"publish","type":"page","link":"http:\/\/bezelie.com\/blog\/?page_id=1897","title":{"rendered":"\u30d7\u30ed\u30b0\u30e9\u30e0\u89e3\u8aac\u300cbezelie.py\u300d"},"content":{"rendered":"<p>\u30fbbezelie.py\u306f\u3079\u30bc\u30ea\u30fc\u5c02\u7528\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u3059\u3002<br \/>\n\u30fbpython\u30d7\u30ed\u30b0\u30e9\u30e0\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u3068\u3057\u3066import\u3059\u308b\u3053\u3068\u3067\u3001\u30b5\u30fc\u30dc\u30c9\u30e9\u30a4\u30d0\u30fc\u3092\u901a\u3058\u3066\uff13\u3064\u306e\u30b5\u30fc\u30dc\u3092\u7c21\u5358\u306b\u5236\u5fa1\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<hr \/>\n<h5>\u5404\u7a2e\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30a4\u30f3\u30dd\u30fc\u30c8<\/h5>\n<pre class=\"height:200 lang:python range:1-18 decode:true\">#!\/usr\/bin\/python\n# -*- coding: utf-8 -*-\n# Bezelie Python Module for Raspberry Pi\n# \u3079\u30bc\u30ea\u30fc\u5c02\u7528\u30e2\u30b8\u30e5\u30fc\u30eb\n\nfrom random import randint         # \u4e71\u6570\u306e\u767a\u751f\nfrom time import sleep             # \u30a6\u30a7\u30a4\u30c8\u51e6\u7406\nimport RPi.GPIO as GPIO            # GPIO\nimport smbus                       # I2C\nimport math                        # \u8a08\u7b97\u7528\nimport threading                   # \u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u51e6\u7406\nimport json                        # json\u30d5\u30a1\u30a4\u30eb\u3092\u6271\u3046\u30e2\u30b8\u30e5\u30fc\u30eb\n\nbus = smbus.SMBus(1)\n\n# \u5909\u6570\njsonFile = \"\/home\/pi\/bezelie\/edgar\/data_chat.json\"        # \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\n\nclass Control(object): # \u30af\u30e9\u30b9\u306e\u5b9a\u7fa9\n\n    # \u521d\u671f\u5316\u30e1\u30bd\u30c3\u30c9\u3002\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210\u6642\u306b\u81ea\u52d5\u5b9f\u884c\u3055\u308c\u308b\u3002\n    def __init__(self, address_pca9685=0x40, dutyMax=490, dutyMin=110, dutyCenter=300, steps=1):\n        f = open (jsonFile,'r')\n        jDict = json.load(f)\n        self.headTrim = int(jDict['data2'][0]['head'])    # \u30c8\u30ea\u30e0\u5024\u306e\u8aad\u307f\u8fbc\u307f\n        self.backTrim = int(jDict['data2'][0]['back'])\n        self.stageTrim = int(jDict['data2'][0]['stage'])\n\n        # \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5909\u6570\u306b\u5024\u3092\u4ee3\u5165\u3002self\u306f\u81ea\u5206\u81ea\u8eab\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u540d\u3002\n        self.address_pca9685 = address_pca9685\n        self.dutyMax = dutyMax\n        self.dutyMin = dutyMin\n        self.dutyCenter = dutyCenter\n        self.steps = steps\n        self.headNow = dutyCenter\n        self.backNow = dutyCenter\n        self.stageNow = dutyCenter\n        self.initPCA9685()\n        # \u7b2c\uff11\u5f15\u6570\u306fself\u306b\u3059\u308b\u306e\u304c\u7fa9\u52d9\u3002\n\n    def moveHead(self, degree, speed=1):\n        max = 320     # \u4e0b\u65b9\u5411\u306e\u9650\u754c\n        min = 230     # \u4e0a\u65b9\u5411\u306e\u9650\u754c\n        self.headNow = self.moveServo(2, degree, self.headTrim, max, min, speed, self.headNow)\n\n    def moveBack(self, degree, speed=1):\n        max = 380     # \u53cd\u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        min = 220     # \u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        self.backNow = self.moveServo(1, degree, self.backTrim, max, min, speed, self.backNow)\n\n    def moveStage(self, degree, speed=1):\n        max = 390     # \u53cd\u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        min = 210     # \u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        self.stageNow = self.moveServo(0, degree, self.stageTrim, max, min, speed, self.stageNow)\n\n    def moveCenter(self): # 3\u3064\u306e\u30b5\u30fc\u30dc\u306e\u56de\u8ee2\u4f4d\u7f6e\u3092\u30c8\u30ea\u30e0\u5024\u306b\u5408\u308f\u305b\u308b\n        self.moveHead(self.headTrim)\n        self.moveBack(self.backTrim)\n        self.moveStage(self.stageTrim)\n\n    def initPCA9685(self):\n      try:\n        bus.write_byte_data(self.address_pca9685, 0x00, 0x00)\n        freq = 0.9 * 50\n        prescaleval = 25000000.0    # 25MHz\n        prescaleval \/= 4096.0       # 12-bit\n        prescaleval \/= float(freq)\n        prescaleval -= 1.0\n        prescale = int(math.floor(prescaleval + 0.5))\n        oldmode = bus.read_byte_data(self.address_pca9685, 0x00)\n        newmode = (oldmode &amp; 0x7F) | 0x10\n        bus.write_byte_data(self.address_pca9685, 0x00, newmode)\n        bus.write_byte_data(self.address_pca9685, 0xFE, prescale)\n        bus.write_byte_data(self.address_pca9685, 0x00, oldmode)\n        sleep(0.005)\n        bus.write_byte_data(self.address_pca9685, 0x00, oldmode | 0xa1)\n      except:\n        print \"\u30b5\u30fc\u30dc\u30c9\u30e9\u30a4\u30d0\u30fc\u30dc\u30fc\u30c9\u3092\u63a5\u7d9a\u3057\u3066\u304f\u3060\u3055\u3044\"\n        # pass\n\n    def resetPCA9685(self):\n        bus.write_byte_data(self.address_pca9685, 0x00, 0x00)\n\n    def setPCA9685Duty(self, channel, on, off):\n        channelpos = 0x6 + 4*channel\n        try:\n            bus.write_i2c_block_data(self.address_pca9685, channelpos, [on&amp;0xFF, on&gt;&gt;8, off&amp;0xFF, off&gt;&gt;8])\n        except IOError:\n            pass\n\n    def moveServo(self, id, degree, trim, max, min, speed, now):\n        dst = (self.dutyMin - self.dutyMax) * (degree + trim + 90) \/ 180 + self.dutyMax\n        if speed == 0:\n            self.setPCA9685Duty_(id, 0, dst)\n            sleep(0.001 * math.fabs(dst - now))\n            now = dst\n        if dst &gt; max:\n            dst = max\n        if dst &lt; min:\n            dst = min\n        while (now != dst):\n            if now &lt; dst:\n                now += self.steps\n                if now &gt; dst:\n                    now = dst\n            else:\n                now -= self.steps\n                if now &lt; dst:\n                    now = dst\n            self.setPCA9685Duty(id, 0, now)\n            sleep(0.004 * self.steps *(speed))\n        return (now)\n\n    def moveRnd(self):\n        self.stop_event = threading.Event()\n        r = randint(1,7)\n        if r == 1:\n            self.thread = threading.Thread(target = self.actHappy)\n        elif r == 2:\n            self.thread = threading.Thread(target = self.actNod)\n        elif r == 3:\n            self.thread = threading.Thread(target = self.actWhy)\n        elif r == 4:\n            self.thread = threading.Thread(target = self.actAround)\n        elif r == 5:\n            self.thread = threading.Thread(target = self.actUp)\n        elif r == 6:\n            self.thread = threading.Thread(target = self.actWave)\n        else:\n            self.thread = threading.Thread(target = self.actEtc)\n        self.thread.start()\n\n    def moveAct(self, act):\n        self.stop_event = threading.Event()\n        if act == 'happy':\n            self.thread = threading.Thread(target = self.actHappy)\n        elif act == 'nod':\n            self.thread = threading.Thread(target = self.actNod)\n        elif act == 'why':\n            self.thread = threading.Thread(target = self.actWhy)\n        elif act == 'around':\n            self.thread = threading.Thread(target = self.actAround)\n        elif act == 'up':\n            self.thread = threading.Thread(target = self.actUp)\n        elif act == 'wave':\n            self.thread = threading.Thread(target = self.actWave)\n        else:\n            self.thread = threading.Thread(target = self.actEtc)\n        self.thread.start()\n\n    def actHappy(self, time=0.2): # \u3057\u3042\u308f\u305b\n        while not self.stop_event.is_set():\n            self.moveHead(10)\n            self.moveBack(5)\n            self.moveBack(-5)\n            self.moveBack(0)\n            sleep (time)\n            self.moveHead(0)\n\n    def actNod(self, time=0.2): # \u3046\u306a\u3065\u304d\n        while not self.stop_event.is_set():\n            self.moveHead(-10)\n            sleep (time)\n            self.moveHead(0)\n\n    def actWhy(self, time=0.2): # \u9996\u304b\u3057\u3052\n        while not self.stop_event.is_set():\n            self.moveHead(10)\n            self.moveBack(20)\n            sleep (time)\n            self.moveBack(0)\n            self.moveHead(0)\n\n    def actAround(self, time=0.2): # \u898b\u56de\u3057\n        while not self.stop_event.is_set():\n            self.moveStage(20)\n            self.moveStage(-20)\n            self.moveStage(0)\n\n    def actUp(self, time=0.2): # \u898b\u4e0a\u3052\n        while not self.stop_event.is_set():\n            self.moveHead(30)\n            sleep (time)\n            self.moveHead(0)\n\n    def actWave(self, time=0.2): # \u304f\u306d\u304f\u306d\n        while not self.stop_event.is_set():\n            self.moveBack(20)\n            self.moveStage(10)\n            self.moveStage(-10)\n            self.moveStage(0)\n            self.moveBack(0)\n\n    def actEtc(self, time=0.5): # ETC\n        while not self.stop_event.is_set():\n            self.moveHead(-10)\n            sleep (time)\n            self.moveHead(0)\n\n    def stop(self):\n        self.stop_event.set()\n        self.thread.join()\n\n# \u30b9\u30af\u30ea\u30d7\u30c8\u3068\u3057\u3066\u5b9f\u884c\u3055\u308c\u305f\u5834\u5408\u306f\u30bb\u30f3\u30bf\u30ea\u30f3\u30b0\u3092\u884c\u3046\nif __name__ == \"__main__\":\n  bez = Control()               # \u3079\u30bc\u30ea\u30fc\u64cd\u4f5c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u751f\u6210\n  f = open (jsonFile,'r')\n  jDict = json.load(f)\n  bez.headTrim = int(jDict['data2'][0]['head'])\n  bez.backTrim = int(jDict['data2'][0]['back'])\n  bez.stageTrim = int(jDict['data2'][0]['stage'])\n  bez.moveCenter()<\/pre>\n<p>&nbsp;<\/p>\n<h5>\u30af\u30e9\u30b9\u521d\u671f\u5316\u6642\u306e\u51e6\u7406<\/h5>\n<pre class=\"height:200 lang:python range:18-40 decode:true\">#!\/usr\/bin\/python\n# -*- coding: utf-8 -*-\n# Bezelie Python Module for Raspberry Pi\n# \u3079\u30bc\u30ea\u30fc\u5c02\u7528\u30e2\u30b8\u30e5\u30fc\u30eb\n\nfrom random import randint         # \u4e71\u6570\u306e\u767a\u751f\nfrom time import sleep             # \u30a6\u30a7\u30a4\u30c8\u51e6\u7406\nimport RPi.GPIO as GPIO            # GPIO\nimport smbus                       # I2C\nimport math                        # \u8a08\u7b97\u7528\nimport threading                   # \u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u51e6\u7406\nimport json                        # json\u30d5\u30a1\u30a4\u30eb\u3092\u6271\u3046\u30e2\u30b8\u30e5\u30fc\u30eb\n\nbus = smbus.SMBus(1)\n\n# \u5909\u6570\njsonFile = \"\/home\/pi\/bezelie\/edgar\/data_chat.json\"        # \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\n\nclass Control(object): # \u30af\u30e9\u30b9\u306e\u5b9a\u7fa9\n\n    # \u521d\u671f\u5316\u30e1\u30bd\u30c3\u30c9\u3002\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210\u6642\u306b\u81ea\u52d5\u5b9f\u884c\u3055\u308c\u308b\u3002\n    def __init__(self, address_pca9685=0x40, dutyMax=490, dutyMin=110, dutyCenter=300, steps=1):\n        f = open (jsonFile,'r')\n        jDict = json.load(f)\n        self.headTrim = int(jDict['data2'][0]['head'])    # \u30c8\u30ea\u30e0\u5024\u306e\u8aad\u307f\u8fbc\u307f\n        self.backTrim = int(jDict['data2'][0]['back'])\n        self.stageTrim = int(jDict['data2'][0]['stage'])\n\n        # \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5909\u6570\u306b\u5024\u3092\u4ee3\u5165\u3002self\u306f\u81ea\u5206\u81ea\u8eab\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u540d\u3002\n        self.address_pca9685 = address_pca9685\n        self.dutyMax = dutyMax\n        self.dutyMin = dutyMin\n        self.dutyCenter = dutyCenter\n        self.steps = steps\n        self.headNow = dutyCenter\n        self.backNow = dutyCenter\n        self.stageNow = dutyCenter\n        self.initPCA9685()\n        # \u7b2c\uff11\u5f15\u6570\u306fself\u306b\u3059\u308b\u306e\u304c\u7fa9\u52d9\u3002\n\n    def moveHead(self, degree, speed=1):\n        max = 320     # \u4e0b\u65b9\u5411\u306e\u9650\u754c\n        min = 230     # \u4e0a\u65b9\u5411\u306e\u9650\u754c\n        self.headNow = self.moveServo(2, degree, self.headTrim, max, min, speed, self.headNow)\n\n    def moveBack(self, degree, speed=1):\n        max = 380     # \u53cd\u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        min = 220     # \u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        self.backNow = self.moveServo(1, degree, self.backTrim, max, min, speed, self.backNow)\n\n    def moveStage(self, degree, speed=1):\n        max = 390     # \u53cd\u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        min = 210     # \u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        self.stageNow = self.moveServo(0, degree, self.stageTrim, max, min, speed, self.stageNow)\n\n    def moveCenter(self): # 3\u3064\u306e\u30b5\u30fc\u30dc\u306e\u56de\u8ee2\u4f4d\u7f6e\u3092\u30c8\u30ea\u30e0\u5024\u306b\u5408\u308f\u305b\u308b\n        self.moveHead(self.headTrim)\n        self.moveBack(self.backTrim)\n        self.moveStage(self.stageTrim)\n\n    def initPCA9685(self):\n      try:\n        bus.write_byte_data(self.address_pca9685, 0x00, 0x00)\n        freq = 0.9 * 50\n        prescaleval = 25000000.0    # 25MHz\n        prescaleval \/= 4096.0       # 12-bit\n        prescaleval \/= float(freq)\n        prescaleval -= 1.0\n        prescale = int(math.floor(prescaleval + 0.5))\n        oldmode = bus.read_byte_data(self.address_pca9685, 0x00)\n        newmode = (oldmode &amp; 0x7F) | 0x10\n        bus.write_byte_data(self.address_pca9685, 0x00, newmode)\n        bus.write_byte_data(self.address_pca9685, 0xFE, prescale)\n        bus.write_byte_data(self.address_pca9685, 0x00, oldmode)\n        sleep(0.005)\n        bus.write_byte_data(self.address_pca9685, 0x00, oldmode | 0xa1)\n      except:\n        print \"\u30b5\u30fc\u30dc\u30c9\u30e9\u30a4\u30d0\u30fc\u30dc\u30fc\u30c9\u3092\u63a5\u7d9a\u3057\u3066\u304f\u3060\u3055\u3044\"\n        # pass\n\n    def resetPCA9685(self):\n        bus.write_byte_data(self.address_pca9685, 0x00, 0x00)\n\n    def setPCA9685Duty(self, channel, on, off):\n        channelpos = 0x6 + 4*channel\n        try:\n            bus.write_i2c_block_data(self.address_pca9685, channelpos, [on&amp;0xFF, on&gt;&gt;8, off&amp;0xFF, off&gt;&gt;8])\n        except IOError:\n            pass\n\n    def moveServo(self, id, degree, trim, max, min, speed, now):\n        dst = (self.dutyMin - self.dutyMax) * (degree + trim + 90) \/ 180 + self.dutyMax\n        if speed == 0:\n            self.setPCA9685Duty_(id, 0, dst)\n            sleep(0.001 * math.fabs(dst - now))\n            now = dst\n        if dst &gt; max:\n            dst = max\n        if dst &lt; min:\n            dst = min\n        while (now != dst):\n            if now &lt; dst:\n                now += self.steps\n                if now &gt; dst:\n                    now = dst\n            else:\n                now -= self.steps\n                if now &lt; dst:\n                    now = dst\n            self.setPCA9685Duty(id, 0, now)\n            sleep(0.004 * self.steps *(speed))\n        return (now)\n\n    def moveRnd(self):\n        self.stop_event = threading.Event()\n        r = randint(1,7)\n        if r == 1:\n            self.thread = threading.Thread(target = self.actHappy)\n        elif r == 2:\n            self.thread = threading.Thread(target = self.actNod)\n        elif r == 3:\n            self.thread = threading.Thread(target = self.actWhy)\n        elif r == 4:\n            self.thread = threading.Thread(target = self.actAround)\n        elif r == 5:\n            self.thread = threading.Thread(target = self.actUp)\n        elif r == 6:\n            self.thread = threading.Thread(target = self.actWave)\n        else:\n            self.thread = threading.Thread(target = self.actEtc)\n        self.thread.start()\n\n    def moveAct(self, act):\n        self.stop_event = threading.Event()\n        if act == 'happy':\n            self.thread = threading.Thread(target = self.actHappy)\n        elif act == 'nod':\n            self.thread = threading.Thread(target = self.actNod)\n        elif act == 'why':\n            self.thread = threading.Thread(target = self.actWhy)\n        elif act == 'around':\n            self.thread = threading.Thread(target = self.actAround)\n        elif act == 'up':\n            self.thread = threading.Thread(target = self.actUp)\n        elif act == 'wave':\n            self.thread = threading.Thread(target = self.actWave)\n        else:\n            self.thread = threading.Thread(target = self.actEtc)\n        self.thread.start()\n\n    def actHappy(self, time=0.2): # \u3057\u3042\u308f\u305b\n        while not self.stop_event.is_set():\n            self.moveHead(10)\n            self.moveBack(5)\n            self.moveBack(-5)\n            self.moveBack(0)\n            sleep (time)\n            self.moveHead(0)\n\n    def actNod(self, time=0.2): # \u3046\u306a\u3065\u304d\n        while not self.stop_event.is_set():\n            self.moveHead(-10)\n            sleep (time)\n            self.moveHead(0)\n\n    def actWhy(self, time=0.2): # \u9996\u304b\u3057\u3052\n        while not self.stop_event.is_set():\n            self.moveHead(10)\n            self.moveBack(20)\n            sleep (time)\n            self.moveBack(0)\n            self.moveHead(0)\n\n    def actAround(self, time=0.2): # \u898b\u56de\u3057\n        while not self.stop_event.is_set():\n            self.moveStage(20)\n            self.moveStage(-20)\n            self.moveStage(0)\n\n    def actUp(self, time=0.2): # \u898b\u4e0a\u3052\n        while not self.stop_event.is_set():\n            self.moveHead(30)\n            sleep (time)\n            self.moveHead(0)\n\n    def actWave(self, time=0.2): # \u304f\u306d\u304f\u306d\n        while not self.stop_event.is_set():\n            self.moveBack(20)\n            self.moveStage(10)\n            self.moveStage(-10)\n            self.moveStage(0)\n            self.moveBack(0)\n\n    def actEtc(self, time=0.5): # ETC\n        while not self.stop_event.is_set():\n            self.moveHead(-10)\n            sleep (time)\n            self.moveHead(0)\n\n    def stop(self):\n        self.stop_event.set()\n        self.thread.join()\n\n# \u30b9\u30af\u30ea\u30d7\u30c8\u3068\u3057\u3066\u5b9f\u884c\u3055\u308c\u305f\u5834\u5408\u306f\u30bb\u30f3\u30bf\u30ea\u30f3\u30b0\u3092\u884c\u3046\nif __name__ == \"__main__\":\n  bez = Control()               # \u3079\u30bc\u30ea\u30fc\u64cd\u4f5c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u751f\u6210\n  f = open (jsonFile,'r')\n  jDict = json.load(f)\n  bez.headTrim = int(jDict['data2'][0]['head'])\n  bez.backTrim = int(jDict['data2'][0]['back'])\n  bez.stageTrim = int(jDict['data2'][0]['stage'])\n  bez.moveCenter()<\/pre>\n<p style=\"padding-left: 30px;\">\u30fbdata_chat.json\u304b\u3089\u30b5\u30fc\u30dc\u306e\u30bb\u30f3\u30bf\u30ea\u30f3\u30b0\u4f4d\u7f6e\u3092\u8aad\u307f\u53d6\u308a\u3001\u5909\u6570\u306b\u4ee3\u5165\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<h5>\u5404\u30b5\u30fc\u30dc\u3092\u52d5\u304b\u3059\u95a2\u6570<\/h5>\n<pre class=\"height:200 lang:python range:40-60 decode:true\">#!\/usr\/bin\/python\n# -*- coding: utf-8 -*-\n# Bezelie Python Module for Raspberry Pi\n# \u3079\u30bc\u30ea\u30fc\u5c02\u7528\u30e2\u30b8\u30e5\u30fc\u30eb\n\nfrom random import randint         # \u4e71\u6570\u306e\u767a\u751f\nfrom time import sleep             # \u30a6\u30a7\u30a4\u30c8\u51e6\u7406\nimport RPi.GPIO as GPIO            # GPIO\nimport smbus                       # I2C\nimport math                        # \u8a08\u7b97\u7528\nimport threading                   # \u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u51e6\u7406\nimport json                        # json\u30d5\u30a1\u30a4\u30eb\u3092\u6271\u3046\u30e2\u30b8\u30e5\u30fc\u30eb\n\nbus = smbus.SMBus(1)\n\n# \u5909\u6570\njsonFile = \"\/home\/pi\/bezelie\/edgar\/data_chat.json\"        # \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\n\nclass Control(object): # \u30af\u30e9\u30b9\u306e\u5b9a\u7fa9\n\n    # \u521d\u671f\u5316\u30e1\u30bd\u30c3\u30c9\u3002\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210\u6642\u306b\u81ea\u52d5\u5b9f\u884c\u3055\u308c\u308b\u3002\n    def __init__(self, address_pca9685=0x40, dutyMax=490, dutyMin=110, dutyCenter=300, steps=1):\n        f = open (jsonFile,'r')\n        jDict = json.load(f)\n        self.headTrim = int(jDict['data2'][0]['head'])    # \u30c8\u30ea\u30e0\u5024\u306e\u8aad\u307f\u8fbc\u307f\n        self.backTrim = int(jDict['data2'][0]['back'])\n        self.stageTrim = int(jDict['data2'][0]['stage'])\n\n        # \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5909\u6570\u306b\u5024\u3092\u4ee3\u5165\u3002self\u306f\u81ea\u5206\u81ea\u8eab\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u540d\u3002\n        self.address_pca9685 = address_pca9685\n        self.dutyMax = dutyMax\n        self.dutyMin = dutyMin\n        self.dutyCenter = dutyCenter\n        self.steps = steps\n        self.headNow = dutyCenter\n        self.backNow = dutyCenter\n        self.stageNow = dutyCenter\n        self.initPCA9685()\n        # \u7b2c\uff11\u5f15\u6570\u306fself\u306b\u3059\u308b\u306e\u304c\u7fa9\u52d9\u3002\n\n    def moveHead(self, degree, speed=1):\n        max = 320     # \u4e0b\u65b9\u5411\u306e\u9650\u754c\n        min = 230     # \u4e0a\u65b9\u5411\u306e\u9650\u754c\n        self.headNow = self.moveServo(2, degree, self.headTrim, max, min, speed, self.headNow)\n\n    def moveBack(self, degree, speed=1):\n        max = 380     # \u53cd\u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        min = 220     # \u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        self.backNow = self.moveServo(1, degree, self.backTrim, max, min, speed, self.backNow)\n\n    def moveStage(self, degree, speed=1):\n        max = 390     # \u53cd\u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        min = 210     # \u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        self.stageNow = self.moveServo(0, degree, self.stageTrim, max, min, speed, self.stageNow)\n\n    def moveCenter(self): # 3\u3064\u306e\u30b5\u30fc\u30dc\u306e\u56de\u8ee2\u4f4d\u7f6e\u3092\u30c8\u30ea\u30e0\u5024\u306b\u5408\u308f\u305b\u308b\n        self.moveHead(self.headTrim)\n        self.moveBack(self.backTrim)\n        self.moveStage(self.stageTrim)\n\n    def initPCA9685(self):\n      try:\n        bus.write_byte_data(self.address_pca9685, 0x00, 0x00)\n        freq = 0.9 * 50\n        prescaleval = 25000000.0    # 25MHz\n        prescaleval \/= 4096.0       # 12-bit\n        prescaleval \/= float(freq)\n        prescaleval -= 1.0\n        prescale = int(math.floor(prescaleval + 0.5))\n        oldmode = bus.read_byte_data(self.address_pca9685, 0x00)\n        newmode = (oldmode &amp; 0x7F) | 0x10\n        bus.write_byte_data(self.address_pca9685, 0x00, newmode)\n        bus.write_byte_data(self.address_pca9685, 0xFE, prescale)\n        bus.write_byte_data(self.address_pca9685, 0x00, oldmode)\n        sleep(0.005)\n        bus.write_byte_data(self.address_pca9685, 0x00, oldmode | 0xa1)\n      except:\n        print \"\u30b5\u30fc\u30dc\u30c9\u30e9\u30a4\u30d0\u30fc\u30dc\u30fc\u30c9\u3092\u63a5\u7d9a\u3057\u3066\u304f\u3060\u3055\u3044\"\n        # pass\n\n    def resetPCA9685(self):\n        bus.write_byte_data(self.address_pca9685, 0x00, 0x00)\n\n    def setPCA9685Duty(self, channel, on, off):\n        channelpos = 0x6 + 4*channel\n        try:\n            bus.write_i2c_block_data(self.address_pca9685, channelpos, [on&amp;0xFF, on&gt;&gt;8, off&amp;0xFF, off&gt;&gt;8])\n        except IOError:\n            pass\n\n    def moveServo(self, id, degree, trim, max, min, speed, now):\n        dst = (self.dutyMin - self.dutyMax) * (degree + trim + 90) \/ 180 + self.dutyMax\n        if speed == 0:\n            self.setPCA9685Duty_(id, 0, dst)\n            sleep(0.001 * math.fabs(dst - now))\n            now = dst\n        if dst &gt; max:\n            dst = max\n        if dst &lt; min:\n            dst = min\n        while (now != dst):\n            if now &lt; dst:\n                now += self.steps\n                if now &gt; dst:\n                    now = dst\n            else:\n                now -= self.steps\n                if now &lt; dst:\n                    now = dst\n            self.setPCA9685Duty(id, 0, now)\n            sleep(0.004 * self.steps *(speed))\n        return (now)\n\n    def moveRnd(self):\n        self.stop_event = threading.Event()\n        r = randint(1,7)\n        if r == 1:\n            self.thread = threading.Thread(target = self.actHappy)\n        elif r == 2:\n            self.thread = threading.Thread(target = self.actNod)\n        elif r == 3:\n            self.thread = threading.Thread(target = self.actWhy)\n        elif r == 4:\n            self.thread = threading.Thread(target = self.actAround)\n        elif r == 5:\n            self.thread = threading.Thread(target = self.actUp)\n        elif r == 6:\n            self.thread = threading.Thread(target = self.actWave)\n        else:\n            self.thread = threading.Thread(target = self.actEtc)\n        self.thread.start()\n\n    def moveAct(self, act):\n        self.stop_event = threading.Event()\n        if act == 'happy':\n            self.thread = threading.Thread(target = self.actHappy)\n        elif act == 'nod':\n            self.thread = threading.Thread(target = self.actNod)\n        elif act == 'why':\n            self.thread = threading.Thread(target = self.actWhy)\n        elif act == 'around':\n            self.thread = threading.Thread(target = self.actAround)\n        elif act == 'up':\n            self.thread = threading.Thread(target = self.actUp)\n        elif act == 'wave':\n            self.thread = threading.Thread(target = self.actWave)\n        else:\n            self.thread = threading.Thread(target = self.actEtc)\n        self.thread.start()\n\n    def actHappy(self, time=0.2): # \u3057\u3042\u308f\u305b\n        while not self.stop_event.is_set():\n            self.moveHead(10)\n            self.moveBack(5)\n            self.moveBack(-5)\n            self.moveBack(0)\n            sleep (time)\n            self.moveHead(0)\n\n    def actNod(self, time=0.2): # \u3046\u306a\u3065\u304d\n        while not self.stop_event.is_set():\n            self.moveHead(-10)\n            sleep (time)\n            self.moveHead(0)\n\n    def actWhy(self, time=0.2): # \u9996\u304b\u3057\u3052\n        while not self.stop_event.is_set():\n            self.moveHead(10)\n            self.moveBack(20)\n            sleep (time)\n            self.moveBack(0)\n            self.moveHead(0)\n\n    def actAround(self, time=0.2): # \u898b\u56de\u3057\n        while not self.stop_event.is_set():\n            self.moveStage(20)\n            self.moveStage(-20)\n            self.moveStage(0)\n\n    def actUp(self, time=0.2): # \u898b\u4e0a\u3052\n        while not self.stop_event.is_set():\n            self.moveHead(30)\n            sleep (time)\n            self.moveHead(0)\n\n    def actWave(self, time=0.2): # \u304f\u306d\u304f\u306d\n        while not self.stop_event.is_set():\n            self.moveBack(20)\n            self.moveStage(10)\n            self.moveStage(-10)\n            self.moveStage(0)\n            self.moveBack(0)\n\n    def actEtc(self, time=0.5): # ETC\n        while not self.stop_event.is_set():\n            self.moveHead(-10)\n            sleep (time)\n            self.moveHead(0)\n\n    def stop(self):\n        self.stop_event.set()\n        self.thread.join()\n\n# \u30b9\u30af\u30ea\u30d7\u30c8\u3068\u3057\u3066\u5b9f\u884c\u3055\u308c\u305f\u5834\u5408\u306f\u30bb\u30f3\u30bf\u30ea\u30f3\u30b0\u3092\u884c\u3046\nif __name__ == \"__main__\":\n  bez = Control()               # \u3079\u30bc\u30ea\u30fc\u64cd\u4f5c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u751f\u6210\n  f = open (jsonFile,'r')\n  jDict = json.load(f)\n  bez.headTrim = int(jDict['data2'][0]['head'])\n  bez.backTrim = int(jDict['data2'][0]['back'])\n  bez.stageTrim = int(jDict['data2'][0]['stage'])\n  bez.moveCenter()<\/pre>\n<p style=\"padding-left: 30px;\">\u30fb\u3079\u30bc\u30ea\u30fc\u306e\uff13\u3064\u306e\u30b5\u30fc\u30dc\u306b\u306f\u540d\u524d\u304c\u3064\u3044\u3066\u3044\u307e\u3059\u3002\u9996\u3092\u4e0a\u4e0b\u306b\u632f\u308b\u30b5\u30fc\u30dc\u304cHead\u3001\u9996\u306e\u6a2a\u632f\u308a\u304cBack\u3001\u4f53\u306e\u56de\u8ee2\u304cStage\u3067\u3059\u3002<\/p>\n<h5>\u30b5\u30fc\u30dc\u30c9\u30e9\u30a4\u30d0\u30fcPCA9685\u306e\u521d\u671f\u5316\u51e6\u7406<\/h5>\n<pre class=\"height:200 lang:python range:60-90 decode:true\">#!\/usr\/bin\/python\n# -*- coding: utf-8 -*-\n# Bezelie Python Module for Raspberry Pi\n# \u3079\u30bc\u30ea\u30fc\u5c02\u7528\u30e2\u30b8\u30e5\u30fc\u30eb\n\nfrom random import randint         # \u4e71\u6570\u306e\u767a\u751f\nfrom time import sleep             # \u30a6\u30a7\u30a4\u30c8\u51e6\u7406\nimport RPi.GPIO as GPIO            # GPIO\nimport smbus                       # I2C\nimport math                        # \u8a08\u7b97\u7528\nimport threading                   # \u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u51e6\u7406\nimport json                        # json\u30d5\u30a1\u30a4\u30eb\u3092\u6271\u3046\u30e2\u30b8\u30e5\u30fc\u30eb\n\nbus = smbus.SMBus(1)\n\n# \u5909\u6570\njsonFile = \"\/home\/pi\/bezelie\/edgar\/data_chat.json\"        # \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\n\nclass Control(object): # \u30af\u30e9\u30b9\u306e\u5b9a\u7fa9\n\n    # \u521d\u671f\u5316\u30e1\u30bd\u30c3\u30c9\u3002\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210\u6642\u306b\u81ea\u52d5\u5b9f\u884c\u3055\u308c\u308b\u3002\n    def __init__(self, address_pca9685=0x40, dutyMax=490, dutyMin=110, dutyCenter=300, steps=1):\n        f = open (jsonFile,'r')\n        jDict = json.load(f)\n        self.headTrim = int(jDict['data2'][0]['head'])    # \u30c8\u30ea\u30e0\u5024\u306e\u8aad\u307f\u8fbc\u307f\n        self.backTrim = int(jDict['data2'][0]['back'])\n        self.stageTrim = int(jDict['data2'][0]['stage'])\n\n        # \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5909\u6570\u306b\u5024\u3092\u4ee3\u5165\u3002self\u306f\u81ea\u5206\u81ea\u8eab\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u540d\u3002\n        self.address_pca9685 = address_pca9685\n        self.dutyMax = dutyMax\n        self.dutyMin = dutyMin\n        self.dutyCenter = dutyCenter\n        self.steps = steps\n        self.headNow = dutyCenter\n        self.backNow = dutyCenter\n        self.stageNow = dutyCenter\n        self.initPCA9685()\n        # \u7b2c\uff11\u5f15\u6570\u306fself\u306b\u3059\u308b\u306e\u304c\u7fa9\u52d9\u3002\n\n    def moveHead(self, degree, speed=1):\n        max = 320     # \u4e0b\u65b9\u5411\u306e\u9650\u754c\n        min = 230     # \u4e0a\u65b9\u5411\u306e\u9650\u754c\n        self.headNow = self.moveServo(2, degree, self.headTrim, max, min, speed, self.headNow)\n\n    def moveBack(self, degree, speed=1):\n        max = 380     # \u53cd\u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        min = 220     # \u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        self.backNow = self.moveServo(1, degree, self.backTrim, max, min, speed, self.backNow)\n\n    def moveStage(self, degree, speed=1):\n        max = 390     # \u53cd\u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        min = 210     # \u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        self.stageNow = self.moveServo(0, degree, self.stageTrim, max, min, speed, self.stageNow)\n\n    def moveCenter(self): # 3\u3064\u306e\u30b5\u30fc\u30dc\u306e\u56de\u8ee2\u4f4d\u7f6e\u3092\u30c8\u30ea\u30e0\u5024\u306b\u5408\u308f\u305b\u308b\n        self.moveHead(self.headTrim)\n        self.moveBack(self.backTrim)\n        self.moveStage(self.stageTrim)\n\n    def initPCA9685(self):\n      try:\n        bus.write_byte_data(self.address_pca9685, 0x00, 0x00)\n        freq = 0.9 * 50\n        prescaleval = 25000000.0    # 25MHz\n        prescaleval \/= 4096.0       # 12-bit\n        prescaleval \/= float(freq)\n        prescaleval -= 1.0\n        prescale = int(math.floor(prescaleval + 0.5))\n        oldmode = bus.read_byte_data(self.address_pca9685, 0x00)\n        newmode = (oldmode &amp; 0x7F) | 0x10\n        bus.write_byte_data(self.address_pca9685, 0x00, newmode)\n        bus.write_byte_data(self.address_pca9685, 0xFE, prescale)\n        bus.write_byte_data(self.address_pca9685, 0x00, oldmode)\n        sleep(0.005)\n        bus.write_byte_data(self.address_pca9685, 0x00, oldmode | 0xa1)\n      except:\n        print \"\u30b5\u30fc\u30dc\u30c9\u30e9\u30a4\u30d0\u30fc\u30dc\u30fc\u30c9\u3092\u63a5\u7d9a\u3057\u3066\u304f\u3060\u3055\u3044\"\n        # pass\n\n    def resetPCA9685(self):\n        bus.write_byte_data(self.address_pca9685, 0x00, 0x00)\n\n    def setPCA9685Duty(self, channel, on, off):\n        channelpos = 0x6 + 4*channel\n        try:\n            bus.write_i2c_block_data(self.address_pca9685, channelpos, [on&amp;0xFF, on&gt;&gt;8, off&amp;0xFF, off&gt;&gt;8])\n        except IOError:\n            pass\n\n    def moveServo(self, id, degree, trim, max, min, speed, now):\n        dst = (self.dutyMin - self.dutyMax) * (degree + trim + 90) \/ 180 + self.dutyMax\n        if speed == 0:\n            self.setPCA9685Duty_(id, 0, dst)\n            sleep(0.001 * math.fabs(dst - now))\n            now = dst\n        if dst &gt; max:\n            dst = max\n        if dst &lt; min:\n            dst = min\n        while (now != dst):\n            if now &lt; dst:\n                now += self.steps\n                if now &gt; dst:\n                    now = dst\n            else:\n                now -= self.steps\n                if now &lt; dst:\n                    now = dst\n            self.setPCA9685Duty(id, 0, now)\n            sleep(0.004 * self.steps *(speed))\n        return (now)\n\n    def moveRnd(self):\n        self.stop_event = threading.Event()\n        r = randint(1,7)\n        if r == 1:\n            self.thread = threading.Thread(target = self.actHappy)\n        elif r == 2:\n            self.thread = threading.Thread(target = self.actNod)\n        elif r == 3:\n            self.thread = threading.Thread(target = self.actWhy)\n        elif r == 4:\n            self.thread = threading.Thread(target = self.actAround)\n        elif r == 5:\n            self.thread = threading.Thread(target = self.actUp)\n        elif r == 6:\n            self.thread = threading.Thread(target = self.actWave)\n        else:\n            self.thread = threading.Thread(target = self.actEtc)\n        self.thread.start()\n\n    def moveAct(self, act):\n        self.stop_event = threading.Event()\n        if act == 'happy':\n            self.thread = threading.Thread(target = self.actHappy)\n        elif act == 'nod':\n            self.thread = threading.Thread(target = self.actNod)\n        elif act == 'why':\n            self.thread = threading.Thread(target = self.actWhy)\n        elif act == 'around':\n            self.thread = threading.Thread(target = self.actAround)\n        elif act == 'up':\n            self.thread = threading.Thread(target = self.actUp)\n        elif act == 'wave':\n            self.thread = threading.Thread(target = self.actWave)\n        else:\n            self.thread = threading.Thread(target = self.actEtc)\n        self.thread.start()\n\n    def actHappy(self, time=0.2): # \u3057\u3042\u308f\u305b\n        while not self.stop_event.is_set():\n            self.moveHead(10)\n            self.moveBack(5)\n            self.moveBack(-5)\n            self.moveBack(0)\n            sleep (time)\n            self.moveHead(0)\n\n    def actNod(self, time=0.2): # \u3046\u306a\u3065\u304d\n        while not self.stop_event.is_set():\n            self.moveHead(-10)\n            sleep (time)\n            self.moveHead(0)\n\n    def actWhy(self, time=0.2): # \u9996\u304b\u3057\u3052\n        while not self.stop_event.is_set():\n            self.moveHead(10)\n            self.moveBack(20)\n            sleep (time)\n            self.moveBack(0)\n            self.moveHead(0)\n\n    def actAround(self, time=0.2): # \u898b\u56de\u3057\n        while not self.stop_event.is_set():\n            self.moveStage(20)\n            self.moveStage(-20)\n            self.moveStage(0)\n\n    def actUp(self, time=0.2): # \u898b\u4e0a\u3052\n        while not self.stop_event.is_set():\n            self.moveHead(30)\n            sleep (time)\n            self.moveHead(0)\n\n    def actWave(self, time=0.2): # \u304f\u306d\u304f\u306d\n        while not self.stop_event.is_set():\n            self.moveBack(20)\n            self.moveStage(10)\n            self.moveStage(-10)\n            self.moveStage(0)\n            self.moveBack(0)\n\n    def actEtc(self, time=0.5): # ETC\n        while not self.stop_event.is_set():\n            self.moveHead(-10)\n            sleep (time)\n            self.moveHead(0)\n\n    def stop(self):\n        self.stop_event.set()\n        self.thread.join()\n\n# \u30b9\u30af\u30ea\u30d7\u30c8\u3068\u3057\u3066\u5b9f\u884c\u3055\u308c\u305f\u5834\u5408\u306f\u30bb\u30f3\u30bf\u30ea\u30f3\u30b0\u3092\u884c\u3046\nif __name__ == \"__main__\":\n  bez = Control()               # \u3079\u30bc\u30ea\u30fc\u64cd\u4f5c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u751f\u6210\n  f = open (jsonFile,'r')\n  jDict = json.load(f)\n  bez.headTrim = int(jDict['data2'][0]['head'])\n  bez.backTrim = int(jDict['data2'][0]['back'])\n  bez.stageTrim = int(jDict['data2'][0]['stage'])\n  bez.moveCenter()<\/pre>\n<p>&nbsp;<\/p>\n<h5>moveServo\uff1a\u30b5\u30fc\u30dc\u3092\u76ee\u7684\u306e\u89d2\u5ea6\u307e\u3067\u56de\u8ee2\u3055\u305b\u308b\u95a2\u6570<\/h5>\n<pre class=\"height:200 lang:python range:90-113 decode:true\">#!\/usr\/bin\/python\n# -*- coding: utf-8 -*-\n# Bezelie Python Module for Raspberry Pi\n# \u3079\u30bc\u30ea\u30fc\u5c02\u7528\u30e2\u30b8\u30e5\u30fc\u30eb\n\nfrom random import randint         # \u4e71\u6570\u306e\u767a\u751f\nfrom time import sleep             # \u30a6\u30a7\u30a4\u30c8\u51e6\u7406\nimport RPi.GPIO as GPIO            # GPIO\nimport smbus                       # I2C\nimport math                        # \u8a08\u7b97\u7528\nimport threading                   # \u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u51e6\u7406\nimport json                        # json\u30d5\u30a1\u30a4\u30eb\u3092\u6271\u3046\u30e2\u30b8\u30e5\u30fc\u30eb\n\nbus = smbus.SMBus(1)\n\n# \u5909\u6570\njsonFile = \"\/home\/pi\/bezelie\/edgar\/data_chat.json\"        # \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\n\nclass Control(object): # \u30af\u30e9\u30b9\u306e\u5b9a\u7fa9\n\n    # \u521d\u671f\u5316\u30e1\u30bd\u30c3\u30c9\u3002\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210\u6642\u306b\u81ea\u52d5\u5b9f\u884c\u3055\u308c\u308b\u3002\n    def __init__(self, address_pca9685=0x40, dutyMax=490, dutyMin=110, dutyCenter=300, steps=1):\n        f = open (jsonFile,'r')\n        jDict = json.load(f)\n        self.headTrim = int(jDict['data2'][0]['head'])    # \u30c8\u30ea\u30e0\u5024\u306e\u8aad\u307f\u8fbc\u307f\n        self.backTrim = int(jDict['data2'][0]['back'])\n        self.stageTrim = int(jDict['data2'][0]['stage'])\n\n        # \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5909\u6570\u306b\u5024\u3092\u4ee3\u5165\u3002self\u306f\u81ea\u5206\u81ea\u8eab\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u540d\u3002\n        self.address_pca9685 = address_pca9685\n        self.dutyMax = dutyMax\n        self.dutyMin = dutyMin\n        self.dutyCenter = dutyCenter\n        self.steps = steps\n        self.headNow = dutyCenter\n        self.backNow = dutyCenter\n        self.stageNow = dutyCenter\n        self.initPCA9685()\n        # \u7b2c\uff11\u5f15\u6570\u306fself\u306b\u3059\u308b\u306e\u304c\u7fa9\u52d9\u3002\n\n    def moveHead(self, degree, speed=1):\n        max = 320     # \u4e0b\u65b9\u5411\u306e\u9650\u754c\n        min = 230     # \u4e0a\u65b9\u5411\u306e\u9650\u754c\n        self.headNow = self.moveServo(2, degree, self.headTrim, max, min, speed, self.headNow)\n\n    def moveBack(self, degree, speed=1):\n        max = 380     # \u53cd\u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        min = 220     # \u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        self.backNow = self.moveServo(1, degree, self.backTrim, max, min, speed, self.backNow)\n\n    def moveStage(self, degree, speed=1):\n        max = 390     # \u53cd\u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        min = 210     # \u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        self.stageNow = self.moveServo(0, degree, self.stageTrim, max, min, speed, self.stageNow)\n\n    def moveCenter(self): # 3\u3064\u306e\u30b5\u30fc\u30dc\u306e\u56de\u8ee2\u4f4d\u7f6e\u3092\u30c8\u30ea\u30e0\u5024\u306b\u5408\u308f\u305b\u308b\n        self.moveHead(self.headTrim)\n        self.moveBack(self.backTrim)\n        self.moveStage(self.stageTrim)\n\n    def initPCA9685(self):\n      try:\n        bus.write_byte_data(self.address_pca9685, 0x00, 0x00)\n        freq = 0.9 * 50\n        prescaleval = 25000000.0    # 25MHz\n        prescaleval \/= 4096.0       # 12-bit\n        prescaleval \/= float(freq)\n        prescaleval -= 1.0\n        prescale = int(math.floor(prescaleval + 0.5))\n        oldmode = bus.read_byte_data(self.address_pca9685, 0x00)\n        newmode = (oldmode &amp; 0x7F) | 0x10\n        bus.write_byte_data(self.address_pca9685, 0x00, newmode)\n        bus.write_byte_data(self.address_pca9685, 0xFE, prescale)\n        bus.write_byte_data(self.address_pca9685, 0x00, oldmode)\n        sleep(0.005)\n        bus.write_byte_data(self.address_pca9685, 0x00, oldmode | 0xa1)\n      except:\n        print \"\u30b5\u30fc\u30dc\u30c9\u30e9\u30a4\u30d0\u30fc\u30dc\u30fc\u30c9\u3092\u63a5\u7d9a\u3057\u3066\u304f\u3060\u3055\u3044\"\n        # pass\n\n    def resetPCA9685(self):\n        bus.write_byte_data(self.address_pca9685, 0x00, 0x00)\n\n    def setPCA9685Duty(self, channel, on, off):\n        channelpos = 0x6 + 4*channel\n        try:\n            bus.write_i2c_block_data(self.address_pca9685, channelpos, [on&amp;0xFF, on&gt;&gt;8, off&amp;0xFF, off&gt;&gt;8])\n        except IOError:\n            pass\n\n    def moveServo(self, id, degree, trim, max, min, speed, now):\n        dst = (self.dutyMin - self.dutyMax) * (degree + trim + 90) \/ 180 + self.dutyMax\n        if speed == 0:\n            self.setPCA9685Duty_(id, 0, dst)\n            sleep(0.001 * math.fabs(dst - now))\n            now = dst\n        if dst &gt; max:\n            dst = max\n        if dst &lt; min:\n            dst = min\n        while (now != dst):\n            if now &lt; dst:\n                now += self.steps\n                if now &gt; dst:\n                    now = dst\n            else:\n                now -= self.steps\n                if now &lt; dst:\n                    now = dst\n            self.setPCA9685Duty(id, 0, now)\n            sleep(0.004 * self.steps *(speed))\n        return (now)\n\n    def moveRnd(self):\n        self.stop_event = threading.Event()\n        r = randint(1,7)\n        if r == 1:\n            self.thread = threading.Thread(target = self.actHappy)\n        elif r == 2:\n            self.thread = threading.Thread(target = self.actNod)\n        elif r == 3:\n            self.thread = threading.Thread(target = self.actWhy)\n        elif r == 4:\n            self.thread = threading.Thread(target = self.actAround)\n        elif r == 5:\n            self.thread = threading.Thread(target = self.actUp)\n        elif r == 6:\n            self.thread = threading.Thread(target = self.actWave)\n        else:\n            self.thread = threading.Thread(target = self.actEtc)\n        self.thread.start()\n\n    def moveAct(self, act):\n        self.stop_event = threading.Event()\n        if act == 'happy':\n            self.thread = threading.Thread(target = self.actHappy)\n        elif act == 'nod':\n            self.thread = threading.Thread(target = self.actNod)\n        elif act == 'why':\n            self.thread = threading.Thread(target = self.actWhy)\n        elif act == 'around':\n            self.thread = threading.Thread(target = self.actAround)\n        elif act == 'up':\n            self.thread = threading.Thread(target = self.actUp)\n        elif act == 'wave':\n            self.thread = threading.Thread(target = self.actWave)\n        else:\n            self.thread = threading.Thread(target = self.actEtc)\n        self.thread.start()\n\n    def actHappy(self, time=0.2): # \u3057\u3042\u308f\u305b\n        while not self.stop_event.is_set():\n            self.moveHead(10)\n            self.moveBack(5)\n            self.moveBack(-5)\n            self.moveBack(0)\n            sleep (time)\n            self.moveHead(0)\n\n    def actNod(self, time=0.2): # \u3046\u306a\u3065\u304d\n        while not self.stop_event.is_set():\n            self.moveHead(-10)\n            sleep (time)\n            self.moveHead(0)\n\n    def actWhy(self, time=0.2): # \u9996\u304b\u3057\u3052\n        while not self.stop_event.is_set():\n            self.moveHead(10)\n            self.moveBack(20)\n            sleep (time)\n            self.moveBack(0)\n            self.moveHead(0)\n\n    def actAround(self, time=0.2): # \u898b\u56de\u3057\n        while not self.stop_event.is_set():\n            self.moveStage(20)\n            self.moveStage(-20)\n            self.moveStage(0)\n\n    def actUp(self, time=0.2): # \u898b\u4e0a\u3052\n        while not self.stop_event.is_set():\n            self.moveHead(30)\n            sleep (time)\n            self.moveHead(0)\n\n    def actWave(self, time=0.2): # \u304f\u306d\u304f\u306d\n        while not self.stop_event.is_set():\n            self.moveBack(20)\n            self.moveStage(10)\n            self.moveStage(-10)\n            self.moveStage(0)\n            self.moveBack(0)\n\n    def actEtc(self, time=0.5): # ETC\n        while not self.stop_event.is_set():\n            self.moveHead(-10)\n            sleep (time)\n            self.moveHead(0)\n\n    def stop(self):\n        self.stop_event.set()\n        self.thread.join()\n\n# \u30b9\u30af\u30ea\u30d7\u30c8\u3068\u3057\u3066\u5b9f\u884c\u3055\u308c\u305f\u5834\u5408\u306f\u30bb\u30f3\u30bf\u30ea\u30f3\u30b0\u3092\u884c\u3046\nif __name__ == \"__main__\":\n  bez = Control()               # \u3079\u30bc\u30ea\u30fc\u64cd\u4f5c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u751f\u6210\n  f = open (jsonFile,'r')\n  jDict = json.load(f)\n  bez.headTrim = int(jDict['data2'][0]['head'])\n  bez.backTrim = int(jDict['data2'][0]['back'])\n  bez.stageTrim = int(jDict['data2'][0]['stage'])\n  bez.moveCenter()<\/pre>\n<p>&nbsp;<\/p>\n<h5>\u8907\u6570\u306e\u30b5\u30fc\u30dc\u3092\u7c21\u5358\u306b\u52d5\u304b\u3057\u305f\u3044\u3068\u304d\u306e\u305f\u3081\u306e\u95a2\u6570<\/h5>\n<pre class=\"height:200 lang:python range:113-150 decode:true\">#!\/usr\/bin\/python\n# -*- coding: utf-8 -*-\n# Bezelie Python Module for Raspberry Pi\n# \u3079\u30bc\u30ea\u30fc\u5c02\u7528\u30e2\u30b8\u30e5\u30fc\u30eb\n\nfrom random import randint         # \u4e71\u6570\u306e\u767a\u751f\nfrom time import sleep             # \u30a6\u30a7\u30a4\u30c8\u51e6\u7406\nimport RPi.GPIO as GPIO            # GPIO\nimport smbus                       # I2C\nimport math                        # \u8a08\u7b97\u7528\nimport threading                   # \u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u51e6\u7406\nimport json                        # json\u30d5\u30a1\u30a4\u30eb\u3092\u6271\u3046\u30e2\u30b8\u30e5\u30fc\u30eb\n\nbus = smbus.SMBus(1)\n\n# \u5909\u6570\njsonFile = \"\/home\/pi\/bezelie\/edgar\/data_chat.json\"        # \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\n\nclass Control(object): # \u30af\u30e9\u30b9\u306e\u5b9a\u7fa9\n\n    # \u521d\u671f\u5316\u30e1\u30bd\u30c3\u30c9\u3002\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210\u6642\u306b\u81ea\u52d5\u5b9f\u884c\u3055\u308c\u308b\u3002\n    def __init__(self, address_pca9685=0x40, dutyMax=490, dutyMin=110, dutyCenter=300, steps=1):\n        f = open (jsonFile,'r')\n        jDict = json.load(f)\n        self.headTrim = int(jDict['data2'][0]['head'])    # \u30c8\u30ea\u30e0\u5024\u306e\u8aad\u307f\u8fbc\u307f\n        self.backTrim = int(jDict['data2'][0]['back'])\n        self.stageTrim = int(jDict['data2'][0]['stage'])\n\n        # \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5909\u6570\u306b\u5024\u3092\u4ee3\u5165\u3002self\u306f\u81ea\u5206\u81ea\u8eab\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u540d\u3002\n        self.address_pca9685 = address_pca9685\n        self.dutyMax = dutyMax\n        self.dutyMin = dutyMin\n        self.dutyCenter = dutyCenter\n        self.steps = steps\n        self.headNow = dutyCenter\n        self.backNow = dutyCenter\n        self.stageNow = dutyCenter\n        self.initPCA9685()\n        # \u7b2c\uff11\u5f15\u6570\u306fself\u306b\u3059\u308b\u306e\u304c\u7fa9\u52d9\u3002\n\n    def moveHead(self, degree, speed=1):\n        max = 320     # \u4e0b\u65b9\u5411\u306e\u9650\u754c\n        min = 230     # \u4e0a\u65b9\u5411\u306e\u9650\u754c\n        self.headNow = self.moveServo(2, degree, self.headTrim, max, min, speed, self.headNow)\n\n    def moveBack(self, degree, speed=1):\n        max = 380     # \u53cd\u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        min = 220     # \u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        self.backNow = self.moveServo(1, degree, self.backTrim, max, min, speed, self.backNow)\n\n    def moveStage(self, degree, speed=1):\n        max = 390     # \u53cd\u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        min = 210     # \u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        self.stageNow = self.moveServo(0, degree, self.stageTrim, max, min, speed, self.stageNow)\n\n    def moveCenter(self): # 3\u3064\u306e\u30b5\u30fc\u30dc\u306e\u56de\u8ee2\u4f4d\u7f6e\u3092\u30c8\u30ea\u30e0\u5024\u306b\u5408\u308f\u305b\u308b\n        self.moveHead(self.headTrim)\n        self.moveBack(self.backTrim)\n        self.moveStage(self.stageTrim)\n\n    def initPCA9685(self):\n      try:\n        bus.write_byte_data(self.address_pca9685, 0x00, 0x00)\n        freq = 0.9 * 50\n        prescaleval = 25000000.0    # 25MHz\n        prescaleval \/= 4096.0       # 12-bit\n        prescaleval \/= float(freq)\n        prescaleval -= 1.0\n        prescale = int(math.floor(prescaleval + 0.5))\n        oldmode = bus.read_byte_data(self.address_pca9685, 0x00)\n        newmode = (oldmode &amp; 0x7F) | 0x10\n        bus.write_byte_data(self.address_pca9685, 0x00, newmode)\n        bus.write_byte_data(self.address_pca9685, 0xFE, prescale)\n        bus.write_byte_data(self.address_pca9685, 0x00, oldmode)\n        sleep(0.005)\n        bus.write_byte_data(self.address_pca9685, 0x00, oldmode | 0xa1)\n      except:\n        print \"\u30b5\u30fc\u30dc\u30c9\u30e9\u30a4\u30d0\u30fc\u30dc\u30fc\u30c9\u3092\u63a5\u7d9a\u3057\u3066\u304f\u3060\u3055\u3044\"\n        # pass\n\n    def resetPCA9685(self):\n        bus.write_byte_data(self.address_pca9685, 0x00, 0x00)\n\n    def setPCA9685Duty(self, channel, on, off):\n        channelpos = 0x6 + 4*channel\n        try:\n            bus.write_i2c_block_data(self.address_pca9685, channelpos, [on&amp;0xFF, on&gt;&gt;8, off&amp;0xFF, off&gt;&gt;8])\n        except IOError:\n            pass\n\n    def moveServo(self, id, degree, trim, max, min, speed, now):\n        dst = (self.dutyMin - self.dutyMax) * (degree + trim + 90) \/ 180 + self.dutyMax\n        if speed == 0:\n            self.setPCA9685Duty_(id, 0, dst)\n            sleep(0.001 * math.fabs(dst - now))\n            now = dst\n        if dst &gt; max:\n            dst = max\n        if dst &lt; min:\n            dst = min\n        while (now != dst):\n            if now &lt; dst:\n                now += self.steps\n                if now &gt; dst:\n                    now = dst\n            else:\n                now -= self.steps\n                if now &lt; dst:\n                    now = dst\n            self.setPCA9685Duty(id, 0, now)\n            sleep(0.004 * self.steps *(speed))\n        return (now)\n\n    def moveRnd(self):\n        self.stop_event = threading.Event()\n        r = randint(1,7)\n        if r == 1:\n            self.thread = threading.Thread(target = self.actHappy)\n        elif r == 2:\n            self.thread = threading.Thread(target = self.actNod)\n        elif r == 3:\n            self.thread = threading.Thread(target = self.actWhy)\n        elif r == 4:\n            self.thread = threading.Thread(target = self.actAround)\n        elif r == 5:\n            self.thread = threading.Thread(target = self.actUp)\n        elif r == 6:\n            self.thread = threading.Thread(target = self.actWave)\n        else:\n            self.thread = threading.Thread(target = self.actEtc)\n        self.thread.start()\n\n    def moveAct(self, act):\n        self.stop_event = threading.Event()\n        if act == 'happy':\n            self.thread = threading.Thread(target = self.actHappy)\n        elif act == 'nod':\n            self.thread = threading.Thread(target = self.actNod)\n        elif act == 'why':\n            self.thread = threading.Thread(target = self.actWhy)\n        elif act == 'around':\n            self.thread = threading.Thread(target = self.actAround)\n        elif act == 'up':\n            self.thread = threading.Thread(target = self.actUp)\n        elif act == 'wave':\n            self.thread = threading.Thread(target = self.actWave)\n        else:\n            self.thread = threading.Thread(target = self.actEtc)\n        self.thread.start()\n\n    def actHappy(self, time=0.2): # \u3057\u3042\u308f\u305b\n        while not self.stop_event.is_set():\n            self.moveHead(10)\n            self.moveBack(5)\n            self.moveBack(-5)\n            self.moveBack(0)\n            sleep (time)\n            self.moveHead(0)\n\n    def actNod(self, time=0.2): # \u3046\u306a\u3065\u304d\n        while not self.stop_event.is_set():\n            self.moveHead(-10)\n            sleep (time)\n            self.moveHead(0)\n\n    def actWhy(self, time=0.2): # \u9996\u304b\u3057\u3052\n        while not self.stop_event.is_set():\n            self.moveHead(10)\n            self.moveBack(20)\n            sleep (time)\n            self.moveBack(0)\n            self.moveHead(0)\n\n    def actAround(self, time=0.2): # \u898b\u56de\u3057\n        while not self.stop_event.is_set():\n            self.moveStage(20)\n            self.moveStage(-20)\n            self.moveStage(0)\n\n    def actUp(self, time=0.2): # \u898b\u4e0a\u3052\n        while not self.stop_event.is_set():\n            self.moveHead(30)\n            sleep (time)\n            self.moveHead(0)\n\n    def actWave(self, time=0.2): # \u304f\u306d\u304f\u306d\n        while not self.stop_event.is_set():\n            self.moveBack(20)\n            self.moveStage(10)\n            self.moveStage(-10)\n            self.moveStage(0)\n            self.moveBack(0)\n\n    def actEtc(self, time=0.5): # ETC\n        while not self.stop_event.is_set():\n            self.moveHead(-10)\n            sleep (time)\n            self.moveHead(0)\n\n    def stop(self):\n        self.stop_event.set()\n        self.thread.join()\n\n# \u30b9\u30af\u30ea\u30d7\u30c8\u3068\u3057\u3066\u5b9f\u884c\u3055\u308c\u305f\u5834\u5408\u306f\u30bb\u30f3\u30bf\u30ea\u30f3\u30b0\u3092\u884c\u3046\nif __name__ == \"__main__\":\n  bez = Control()               # \u3079\u30bc\u30ea\u30fc\u64cd\u4f5c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u751f\u6210\n  f = open (jsonFile,'r')\n  jDict = json.load(f)\n  bez.headTrim = int(jDict['data2'][0]['head'])\n  bez.backTrim = int(jDict['data2'][0]['back'])\n  bez.stageTrim = int(jDict['data2'][0]['stage'])\n  bez.moveCenter()<\/pre>\n<p style=\"padding-left: 30px;\">\u30fbmoveRnd()\u306f\u30e9\u30f3\u30c0\u30e0\u3067\u611f\u60c5\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<br \/>\n\u30fbmoveAct()\u306f\u6307\u5b9a\u3055\u308c\u305f\u611f\u60c5\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<h5>\u611f\u60c5\u30a2\u30af\u30b7\u30e7\u30f3\u95a2\u6570<\/h5>\n<pre class=\"height:200 lang:python range:150-203 decode:true\">#!\/usr\/bin\/python\n# -*- coding: utf-8 -*-\n# Bezelie Python Module for Raspberry Pi\n# \u3079\u30bc\u30ea\u30fc\u5c02\u7528\u30e2\u30b8\u30e5\u30fc\u30eb\n\nfrom random import randint         # \u4e71\u6570\u306e\u767a\u751f\nfrom time import sleep             # \u30a6\u30a7\u30a4\u30c8\u51e6\u7406\nimport RPi.GPIO as GPIO            # GPIO\nimport smbus                       # I2C\nimport math                        # \u8a08\u7b97\u7528\nimport threading                   # \u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u51e6\u7406\nimport json                        # json\u30d5\u30a1\u30a4\u30eb\u3092\u6271\u3046\u30e2\u30b8\u30e5\u30fc\u30eb\n\nbus = smbus.SMBus(1)\n\n# \u5909\u6570\njsonFile = \"\/home\/pi\/bezelie\/edgar\/data_chat.json\"        # \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\n\nclass Control(object): # \u30af\u30e9\u30b9\u306e\u5b9a\u7fa9\n\n    # \u521d\u671f\u5316\u30e1\u30bd\u30c3\u30c9\u3002\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210\u6642\u306b\u81ea\u52d5\u5b9f\u884c\u3055\u308c\u308b\u3002\n    def __init__(self, address_pca9685=0x40, dutyMax=490, dutyMin=110, dutyCenter=300, steps=1):\n        f = open (jsonFile,'r')\n        jDict = json.load(f)\n        self.headTrim = int(jDict['data2'][0]['head'])    # \u30c8\u30ea\u30e0\u5024\u306e\u8aad\u307f\u8fbc\u307f\n        self.backTrim = int(jDict['data2'][0]['back'])\n        self.stageTrim = int(jDict['data2'][0]['stage'])\n\n        # \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5909\u6570\u306b\u5024\u3092\u4ee3\u5165\u3002self\u306f\u81ea\u5206\u81ea\u8eab\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u540d\u3002\n        self.address_pca9685 = address_pca9685\n        self.dutyMax = dutyMax\n        self.dutyMin = dutyMin\n        self.dutyCenter = dutyCenter\n        self.steps = steps\n        self.headNow = dutyCenter\n        self.backNow = dutyCenter\n        self.stageNow = dutyCenter\n        self.initPCA9685()\n        # \u7b2c\uff11\u5f15\u6570\u306fself\u306b\u3059\u308b\u306e\u304c\u7fa9\u52d9\u3002\n\n    def moveHead(self, degree, speed=1):\n        max = 320     # \u4e0b\u65b9\u5411\u306e\u9650\u754c\n        min = 230     # \u4e0a\u65b9\u5411\u306e\u9650\u754c\n        self.headNow = self.moveServo(2, degree, self.headTrim, max, min, speed, self.headNow)\n\n    def moveBack(self, degree, speed=1):\n        max = 380     # \u53cd\u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        min = 220     # \u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        self.backNow = self.moveServo(1, degree, self.backTrim, max, min, speed, self.backNow)\n\n    def moveStage(self, degree, speed=1):\n        max = 390     # \u53cd\u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        min = 210     # \u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        self.stageNow = self.moveServo(0, degree, self.stageTrim, max, min, speed, self.stageNow)\n\n    def moveCenter(self): # 3\u3064\u306e\u30b5\u30fc\u30dc\u306e\u56de\u8ee2\u4f4d\u7f6e\u3092\u30c8\u30ea\u30e0\u5024\u306b\u5408\u308f\u305b\u308b\n        self.moveHead(self.headTrim)\n        self.moveBack(self.backTrim)\n        self.moveStage(self.stageTrim)\n\n    def initPCA9685(self):\n      try:\n        bus.write_byte_data(self.address_pca9685, 0x00, 0x00)\n        freq = 0.9 * 50\n        prescaleval = 25000000.0    # 25MHz\n        prescaleval \/= 4096.0       # 12-bit\n        prescaleval \/= float(freq)\n        prescaleval -= 1.0\n        prescale = int(math.floor(prescaleval + 0.5))\n        oldmode = bus.read_byte_data(self.address_pca9685, 0x00)\n        newmode = (oldmode &amp; 0x7F) | 0x10\n        bus.write_byte_data(self.address_pca9685, 0x00, newmode)\n        bus.write_byte_data(self.address_pca9685, 0xFE, prescale)\n        bus.write_byte_data(self.address_pca9685, 0x00, oldmode)\n        sleep(0.005)\n        bus.write_byte_data(self.address_pca9685, 0x00, oldmode | 0xa1)\n      except:\n        print \"\u30b5\u30fc\u30dc\u30c9\u30e9\u30a4\u30d0\u30fc\u30dc\u30fc\u30c9\u3092\u63a5\u7d9a\u3057\u3066\u304f\u3060\u3055\u3044\"\n        # pass\n\n    def resetPCA9685(self):\n        bus.write_byte_data(self.address_pca9685, 0x00, 0x00)\n\n    def setPCA9685Duty(self, channel, on, off):\n        channelpos = 0x6 + 4*channel\n        try:\n            bus.write_i2c_block_data(self.address_pca9685, channelpos, [on&amp;0xFF, on&gt;&gt;8, off&amp;0xFF, off&gt;&gt;8])\n        except IOError:\n            pass\n\n    def moveServo(self, id, degree, trim, max, min, speed, now):\n        dst = (self.dutyMin - self.dutyMax) * (degree + trim + 90) \/ 180 + self.dutyMax\n        if speed == 0:\n            self.setPCA9685Duty_(id, 0, dst)\n            sleep(0.001 * math.fabs(dst - now))\n            now = dst\n        if dst &gt; max:\n            dst = max\n        if dst &lt; min:\n            dst = min\n        while (now != dst):\n            if now &lt; dst:\n                now += self.steps\n                if now &gt; dst:\n                    now = dst\n            else:\n                now -= self.steps\n                if now &lt; dst:\n                    now = dst\n            self.setPCA9685Duty(id, 0, now)\n            sleep(0.004 * self.steps *(speed))\n        return (now)\n\n    def moveRnd(self):\n        self.stop_event = threading.Event()\n        r = randint(1,7)\n        if r == 1:\n            self.thread = threading.Thread(target = self.actHappy)\n        elif r == 2:\n            self.thread = threading.Thread(target = self.actNod)\n        elif r == 3:\n            self.thread = threading.Thread(target = self.actWhy)\n        elif r == 4:\n            self.thread = threading.Thread(target = self.actAround)\n        elif r == 5:\n            self.thread = threading.Thread(target = self.actUp)\n        elif r == 6:\n            self.thread = threading.Thread(target = self.actWave)\n        else:\n            self.thread = threading.Thread(target = self.actEtc)\n        self.thread.start()\n\n    def moveAct(self, act):\n        self.stop_event = threading.Event()\n        if act == 'happy':\n            self.thread = threading.Thread(target = self.actHappy)\n        elif act == 'nod':\n            self.thread = threading.Thread(target = self.actNod)\n        elif act == 'why':\n            self.thread = threading.Thread(target = self.actWhy)\n        elif act == 'around':\n            self.thread = threading.Thread(target = self.actAround)\n        elif act == 'up':\n            self.thread = threading.Thread(target = self.actUp)\n        elif act == 'wave':\n            self.thread = threading.Thread(target = self.actWave)\n        else:\n            self.thread = threading.Thread(target = self.actEtc)\n        self.thread.start()\n\n    def actHappy(self, time=0.2): # \u3057\u3042\u308f\u305b\n        while not self.stop_event.is_set():\n            self.moveHead(10)\n            self.moveBack(5)\n            self.moveBack(-5)\n            self.moveBack(0)\n            sleep (time)\n            self.moveHead(0)\n\n    def actNod(self, time=0.2): # \u3046\u306a\u3065\u304d\n        while not self.stop_event.is_set():\n            self.moveHead(-10)\n            sleep (time)\n            self.moveHead(0)\n\n    def actWhy(self, time=0.2): # \u9996\u304b\u3057\u3052\n        while not self.stop_event.is_set():\n            self.moveHead(10)\n            self.moveBack(20)\n            sleep (time)\n            self.moveBack(0)\n            self.moveHead(0)\n\n    def actAround(self, time=0.2): # \u898b\u56de\u3057\n        while not self.stop_event.is_set():\n            self.moveStage(20)\n            self.moveStage(-20)\n            self.moveStage(0)\n\n    def actUp(self, time=0.2): # \u898b\u4e0a\u3052\n        while not self.stop_event.is_set():\n            self.moveHead(30)\n            sleep (time)\n            self.moveHead(0)\n\n    def actWave(self, time=0.2): # \u304f\u306d\u304f\u306d\n        while not self.stop_event.is_set():\n            self.moveBack(20)\n            self.moveStage(10)\n            self.moveStage(-10)\n            self.moveStage(0)\n            self.moveBack(0)\n\n    def actEtc(self, time=0.5): # ETC\n        while not self.stop_event.is_set():\n            self.moveHead(-10)\n            sleep (time)\n            self.moveHead(0)\n\n    def stop(self):\n        self.stop_event.set()\n        self.thread.join()\n\n# \u30b9\u30af\u30ea\u30d7\u30c8\u3068\u3057\u3066\u5b9f\u884c\u3055\u308c\u305f\u5834\u5408\u306f\u30bb\u30f3\u30bf\u30ea\u30f3\u30b0\u3092\u884c\u3046\nif __name__ == \"__main__\":\n  bez = Control()               # \u3079\u30bc\u30ea\u30fc\u64cd\u4f5c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u751f\u6210\n  f = open (jsonFile,'r')\n  jDict = json.load(f)\n  bez.headTrim = int(jDict['data2'][0]['head'])\n  bez.backTrim = int(jDict['data2'][0]['back'])\n  bez.stageTrim = int(jDict['data2'][0]['stage'])\n  bez.moveCenter()<\/pre>\n<p style=\"padding-left: 30px;\">\u30fb\uff16\u7a2e\u985e\u306e\u611f\u60c5\u30a2\u30af\u30b7\u30e7\u30f3\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<h5>\u76f4\u63a5\u5b9f\u884c\u3055\u308c\u305f\u5834\u5408\u306e\u51e6\u7406<\/h5>\n<pre class=\"height:200 lang:python range:203-300 decode:true \">#!\/usr\/bin\/python\n# -*- coding: utf-8 -*-\n# Bezelie Python Module for Raspberry Pi\n# \u3079\u30bc\u30ea\u30fc\u5c02\u7528\u30e2\u30b8\u30e5\u30fc\u30eb\n\nfrom random import randint         # \u4e71\u6570\u306e\u767a\u751f\nfrom time import sleep             # \u30a6\u30a7\u30a4\u30c8\u51e6\u7406\nimport RPi.GPIO as GPIO            # GPIO\nimport smbus                       # I2C\nimport math                        # \u8a08\u7b97\u7528\nimport threading                   # \u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u51e6\u7406\nimport json                        # json\u30d5\u30a1\u30a4\u30eb\u3092\u6271\u3046\u30e2\u30b8\u30e5\u30fc\u30eb\n\nbus = smbus.SMBus(1)\n\n# \u5909\u6570\njsonFile = \"\/home\/pi\/bezelie\/edgar\/data_chat.json\"        # \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\n\nclass Control(object): # \u30af\u30e9\u30b9\u306e\u5b9a\u7fa9\n\n    # \u521d\u671f\u5316\u30e1\u30bd\u30c3\u30c9\u3002\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210\u6642\u306b\u81ea\u52d5\u5b9f\u884c\u3055\u308c\u308b\u3002\n    def __init__(self, address_pca9685=0x40, dutyMax=490, dutyMin=110, dutyCenter=300, steps=1):\n        f = open (jsonFile,'r')\n        jDict = json.load(f)\n        self.headTrim = int(jDict['data2'][0]['head'])    # \u30c8\u30ea\u30e0\u5024\u306e\u8aad\u307f\u8fbc\u307f\n        self.backTrim = int(jDict['data2'][0]['back'])\n        self.stageTrim = int(jDict['data2'][0]['stage'])\n\n        # \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5909\u6570\u306b\u5024\u3092\u4ee3\u5165\u3002self\u306f\u81ea\u5206\u81ea\u8eab\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u540d\u3002\n        self.address_pca9685 = address_pca9685\n        self.dutyMax = dutyMax\n        self.dutyMin = dutyMin\n        self.dutyCenter = dutyCenter\n        self.steps = steps\n        self.headNow = dutyCenter\n        self.backNow = dutyCenter\n        self.stageNow = dutyCenter\n        self.initPCA9685()\n        # \u7b2c\uff11\u5f15\u6570\u306fself\u306b\u3059\u308b\u306e\u304c\u7fa9\u52d9\u3002\n\n    def moveHead(self, degree, speed=1):\n        max = 320     # \u4e0b\u65b9\u5411\u306e\u9650\u754c\n        min = 230     # \u4e0a\u65b9\u5411\u306e\u9650\u754c\n        self.headNow = self.moveServo(2, degree, self.headTrim, max, min, speed, self.headNow)\n\n    def moveBack(self, degree, speed=1):\n        max = 380     # \u53cd\u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        min = 220     # \u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        self.backNow = self.moveServo(1, degree, self.backTrim, max, min, speed, self.backNow)\n\n    def moveStage(self, degree, speed=1):\n        max = 390     # \u53cd\u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        min = 210     # \u6642\u8a08\u56de\u308a\u306e\u9650\u754c\n        self.stageNow = self.moveServo(0, degree, self.stageTrim, max, min, speed, self.stageNow)\n\n    def moveCenter(self): # 3\u3064\u306e\u30b5\u30fc\u30dc\u306e\u56de\u8ee2\u4f4d\u7f6e\u3092\u30c8\u30ea\u30e0\u5024\u306b\u5408\u308f\u305b\u308b\n        self.moveHead(self.headTrim)\n        self.moveBack(self.backTrim)\n        self.moveStage(self.stageTrim)\n\n    def initPCA9685(self):\n      try:\n        bus.write_byte_data(self.address_pca9685, 0x00, 0x00)\n        freq = 0.9 * 50\n        prescaleval = 25000000.0    # 25MHz\n        prescaleval \/= 4096.0       # 12-bit\n        prescaleval \/= float(freq)\n        prescaleval -= 1.0\n        prescale = int(math.floor(prescaleval + 0.5))\n        oldmode = bus.read_byte_data(self.address_pca9685, 0x00)\n        newmode = (oldmode &amp; 0x7F) | 0x10\n        bus.write_byte_data(self.address_pca9685, 0x00, newmode)\n        bus.write_byte_data(self.address_pca9685, 0xFE, prescale)\n        bus.write_byte_data(self.address_pca9685, 0x00, oldmode)\n        sleep(0.005)\n        bus.write_byte_data(self.address_pca9685, 0x00, oldmode | 0xa1)\n      except:\n        print \"\u30b5\u30fc\u30dc\u30c9\u30e9\u30a4\u30d0\u30fc\u30dc\u30fc\u30c9\u3092\u63a5\u7d9a\u3057\u3066\u304f\u3060\u3055\u3044\"\n        # pass\n\n    def resetPCA9685(self):\n        bus.write_byte_data(self.address_pca9685, 0x00, 0x00)\n\n    def setPCA9685Duty(self, channel, on, off):\n        channelpos = 0x6 + 4*channel\n        try:\n            bus.write_i2c_block_data(self.address_pca9685, channelpos, [on&amp;0xFF, on&gt;&gt;8, off&amp;0xFF, off&gt;&gt;8])\n        except IOError:\n            pass\n\n    def moveServo(self, id, degree, trim, max, min, speed, now):\n        dst = (self.dutyMin - self.dutyMax) * (degree + trim + 90) \/ 180 + self.dutyMax\n        if speed == 0:\n            self.setPCA9685Duty_(id, 0, dst)\n            sleep(0.001 * math.fabs(dst - now))\n            now = dst\n        if dst &gt; max:\n            dst = max\n        if dst &lt; min:\n            dst = min\n        while (now != dst):\n            if now &lt; dst:\n                now += self.steps\n                if now &gt; dst:\n                    now = dst\n            else:\n                now -= self.steps\n                if now &lt; dst:\n                    now = dst\n            self.setPCA9685Duty(id, 0, now)\n            sleep(0.004 * self.steps *(speed))\n        return (now)\n\n    def moveRnd(self):\n        self.stop_event = threading.Event()\n        r = randint(1,7)\n        if r == 1:\n            self.thread = threading.Thread(target = self.actHappy)\n        elif r == 2:\n            self.thread = threading.Thread(target = self.actNod)\n        elif r == 3:\n            self.thread = threading.Thread(target = self.actWhy)\n        elif r == 4:\n            self.thread = threading.Thread(target = self.actAround)\n        elif r == 5:\n            self.thread = threading.Thread(target = self.actUp)\n        elif r == 6:\n            self.thread = threading.Thread(target = self.actWave)\n        else:\n            self.thread = threading.Thread(target = self.actEtc)\n        self.thread.start()\n\n    def moveAct(self, act):\n        self.stop_event = threading.Event()\n        if act == 'happy':\n            self.thread = threading.Thread(target = self.actHappy)\n        elif act == 'nod':\n            self.thread = threading.Thread(target = self.actNod)\n        elif act == 'why':\n            self.thread = threading.Thread(target = self.actWhy)\n        elif act == 'around':\n            self.thread = threading.Thread(target = self.actAround)\n        elif act == 'up':\n            self.thread = threading.Thread(target = self.actUp)\n        elif act == 'wave':\n            self.thread = threading.Thread(target = self.actWave)\n        else:\n            self.thread = threading.Thread(target = self.actEtc)\n        self.thread.start()\n\n    def actHappy(self, time=0.2): # \u3057\u3042\u308f\u305b\n        while not self.stop_event.is_set():\n            self.moveHead(10)\n            self.moveBack(5)\n            self.moveBack(-5)\n            self.moveBack(0)\n            sleep (time)\n            self.moveHead(0)\n\n    def actNod(self, time=0.2): # \u3046\u306a\u3065\u304d\n        while not self.stop_event.is_set():\n            self.moveHead(-10)\n            sleep (time)\n            self.moveHead(0)\n\n    def actWhy(self, time=0.2): # \u9996\u304b\u3057\u3052\n        while not self.stop_event.is_set():\n            self.moveHead(10)\n            self.moveBack(20)\n            sleep (time)\n            self.moveBack(0)\n            self.moveHead(0)\n\n    def actAround(self, time=0.2): # \u898b\u56de\u3057\n        while not self.stop_event.is_set():\n            self.moveStage(20)\n            self.moveStage(-20)\n            self.moveStage(0)\n\n    def actUp(self, time=0.2): # \u898b\u4e0a\u3052\n        while not self.stop_event.is_set():\n            self.moveHead(30)\n            sleep (time)\n            self.moveHead(0)\n\n    def actWave(self, time=0.2): # \u304f\u306d\u304f\u306d\n        while not self.stop_event.is_set():\n            self.moveBack(20)\n            self.moveStage(10)\n            self.moveStage(-10)\n            self.moveStage(0)\n            self.moveBack(0)\n\n    def actEtc(self, time=0.5): # ETC\n        while not self.stop_event.is_set():\n            self.moveHead(-10)\n            sleep (time)\n            self.moveHead(0)\n\n    def stop(self):\n        self.stop_event.set()\n        self.thread.join()\n\n# \u30b9\u30af\u30ea\u30d7\u30c8\u3068\u3057\u3066\u5b9f\u884c\u3055\u308c\u305f\u5834\u5408\u306f\u30bb\u30f3\u30bf\u30ea\u30f3\u30b0\u3092\u884c\u3046\nif __name__ == \"__main__\":\n  bez = Control()               # \u3079\u30bc\u30ea\u30fc\u64cd\u4f5c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u751f\u6210\n  f = open (jsonFile,'r')\n  jDict = json.load(f)\n  bez.headTrim = int(jDict['data2'][0]['head'])\n  bez.backTrim = int(jDict['data2'][0]['back'])\n  bez.stageTrim = int(jDict['data2'][0]['stage'])\n  bez.moveCenter()<\/pre>\n<p style=\"padding-left: 30px;\">\u30fb\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u76f4\u63a5\u5b9f\u884c\u3055\u308c\u305f\u5834\u5408\u306f\u3001\u30b5\u30fc\u30dc\u306e\u30bb\u30f3\u30bf\u30ea\u30f3\u30b0\u3092\u884c\u3044\u307e\u3059\u3002<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u30fbbezelie.py\u306f\u3079\u30bc\u30ea\u30fc\u5c02\u7528\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u3059\u3002 \u30fbpython\u30d7\u30ed\u30b0\u30e9\u30e0\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u3068\u3057\u3066import\u3059\u308b\u3053\u3068\u3067\u3001\u30b5\u30fc\u30dc\u30c9\u30e9\u30a4\u30d0\u30fc\u3092\u901a\u3058\u3066\uff13\u3064\u306e\u30b5\u30fc\u30dc\u3092\u7c21\u5358\u306b\u5236\u5fa1\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u5404\u7a2e\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30a4\u30f3\u30dd\u30fc\u30c8  &hellip; <a href=\"http:\/\/bezelie.com\/blog\/?page_id=1897\" class=\"more-link\"><span class=\"screen-reader-text\">&#8220;\u30d7\u30ed\u30b0\u30e9\u30e0\u89e3\u8aac\u300cbezelie.py\u300d&#8221; \u306e<\/span>\u7d9a\u304d\u3092\u8aad\u3080<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1897","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"http:\/\/bezelie.com\/blog\/index.php?rest_route=\/wp\/v2\/pages\/1897","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/bezelie.com\/blog\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/bezelie.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/bezelie.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/bezelie.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1897"}],"version-history":[{"count":9,"href":"http:\/\/bezelie.com\/blog\/index.php?rest_route=\/wp\/v2\/pages\/1897\/revisions"}],"predecessor-version":[{"id":2334,"href":"http:\/\/bezelie.com\/blog\/index.php?rest_route=\/wp\/v2\/pages\/1897\/revisions\/2334"}],"wp:attachment":[{"href":"http:\/\/bezelie.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1897"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}