GPIO」カテゴリーアーカイブ

Pi – ADT7410

温度センサー ADT7410
GND ポートを変更し、「RaspberryPi で学ぶ電子工作」をベースに構築してみた。
2.54mmピッチコネクター ZL2543-4PS と ZL2543-5PS を使用
ZL2543 コネクターを使用すると ADT7410 付属の細ピンヘッダでは接触不良を起こすので、普通のピンヘッダに交換


接続確認
# i2cdetect -y 1

本では、i2c-tools_3.1.0 となってるが 最新の、i2c-tools_3.1.2 を適用
後は、本の様にすればOK

気が向いたら、zabbix-server に 温度 data を送りグラフ化でもしてみようかな?
( SD カードは書き換え制限が有るので )

Pi – サーボモーター

昨年、デジタル・マイクロサーボ SG90 と2軸カメラマウントで試した時の記録
ここを参考に、一部変更してます。

重心の関係で、カメラの取付向きを逆に取付。
( 仰角が制限されますが自分の場合は問題ないので )

wiringpi は使用せず webiopi で制御
GPIO は、12,13 を使用

servo.py
上下左右、初期位置は環境に合わせて要変更

import webiopi
GPIO = webiopi.GPIO
SERVO_PAN  = 12
SERVO_TILT = 13
DEFAULT_PAN  = 0
DEFAULT_TILT = -30
CURRENT_PAN  = 0
CURRENT_TILT = -30
PAN_MAX  = 70
PAN_MIN  = -70
TILT_MAX = 10
TILT_MIN = -70
PAN_UNIT  = 10
TILT_UNIT = 10
def setup():
  GPIO.setFunction(SERVO_PAN,  GPIO.PWM)
  GPIO.setFunction(SERVO_TILT, GPIO.PWM)
  GPIO.pulseAngle(SERVO_PAN,  DEFAULT_PAN)
  GPIO.pulseAngle(SERVO_TILT, DEFAULT_TILT)
  webiopi.sleep(0.5)
  GPIO.pulseRatio(SERVO_PAN,  0)
  GPIO.pulseRatio(SERVO_TILT, 0)
def loop():
  webiopi.sleep(0.5)
@webiopi.macro
def defaultPosition():
  global CURRENT_PAN
  global CURRENT_TILT
  CURRENT_PAN  = DEFAULT_PAN
  CURRENT_TILT = DEFAULT_TILT
  GPIO.pulseAngle(SERVO_PAN,  DEFAULT_PAN)
  GPIO.pulseAngle(SERVO_TILT, DEFAULT_TILT)
  webiopi.sleep(0.5)
  GPIO.pulseRatio(SERVO_PAN,  0)
  GPIO.pulseRatio(SERVO_TILT, 0)
@webiopi.macro
def right():
  global CURRENT_PAN
  if CURRENT_PAN > PAN_MIN:
    CURRENT_PAN = CURRENT_PAN - PAN_UNIT
    GPIO.pulseAngle(SERVO_PAN, CURRENT_PAN)
    webiopi.sleep(0.5)
    GPIO.pulseRatio(SERVO_PAN, 0)
@webiopi.macro
def left():
  global CURRENT_PAN
  if CURRENT_PAN < PAN_MAX:
    CURRENT_PAN = CURRENT_PAN + PAN_UNIT
    GPIO.pulseAngle(SERVO_PAN, CURRENT_PAN)
    webiopi.sleep(0.5)
    GPIO.pulseRatio(SERVO_PAN, 0)
@webiopi.macro
def up():
  global CURRENT_TILT
  if CURRENT_TILT < TILT_MAX:
    CURRENT_TILT = CURRENT_TILT + TILT_UNIT
    GPIO.pulseAngle(SERVO_TILT, CURRENT_TILT)
    webiopi.sleep(0.5)
    GPIO.pulseRatio(SERVO_TILT, 0)
@webiopi.macro
def down():
  global CURRENT_TILT
  if CURRENT_TILT > TILT_MIN:
    CURRENT_TILT = CURRENT_TILT - TILT_UNIT
    GPIO.pulseAngle(SERVO_TILT, CURRENT_TILT)
    webiopi.sleep(0.5)
    GPIO.pulseRatio(SERVO_TILT, 0)
def destroy():
  GPIO.setup(SERVO_PAN,  GPIO.IN)
  GPIO.setup(SERVO_TILT, GPIO.IN)

index.html
mjpg-streamer は、事前に設定済

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Servo Control</title>
  <script type="text/javascript" src="/webiopi.js"></script>
  <script type="text/javascript">
    webiopi().ready(function(){
      var callBack = function(macro, args, response){
      }
      var defaultBtn = webiopi().createButton("defaultBtn", "戻", function(){
        console.log("JS:Default")
        webiopi().callMacro("defaultPosition",[], callBack);
      });
      $("#control-def").append(defaultBtn);
      var rightBtn = webiopi().createButton("rightBtn", "右", function(){
        console.log("JS:Right")
        webiopi().callMacro("right",[], callBack);
      });
      $("#control-r").append(rightBtn);
      var leftBtn = webiopi().createButton("leftBtn", "左", function(){
        console.log("JS:Left")
        webiopi().callMacro("left",[], callBack);
      });
      $("#control-l").append(leftBtn);
      var upBtn = webiopi().createButton("upBtn", "上", function(){
        console.log("JS:Up")
        webiopi().callMacro("up",[], callBack);
      });
      $("#control-u").append(upBtn);
      var downBtn = webiopi().createButton("downBtn", "下", function(){
        console.log("JS:Down")
        webiopi().callMacro("down",[],callBack);
      });
      $("#control-d").append(downBtn);
      webiopi().refreshGPIO(true);
    });
  </script>
</head>
<body>
<div align="left">
<table border=0 cellspacing="10" cellpadding="0">
  <tbody>
  <tr>
    <td><img width="640" height="480" src="http://[Raspberry Pi-IP]:8080/?action=stream" /></td>
    <td>
	<table border=0 cellspacing="5" cellpadding="0">
	  <tbody>
	  <tr>
	    <td>&nbsp;</td>
	    <td><div id="control-u"></div></td>
	    <td>&nbsp;</td>
	  </tr>
	  <tr>
	    <td><div id="control-l"></div></td>
	    <td><div id="control-def"></div></td>
	    <td><div id="control-r"></div></td>
	  </tr>
	  <tr>
	    <td>&nbsp;</td>
	    <td><div id="control-d"></div></td>
	    <td>&nbsp;</td>
	  </tr>
	  </tbody>
	</table>
    </td>
  </tr>
  </tbody>
</table>
</div>
</body>
</html>

/etc/webiopi/config を適宜変更後、webiopi.service を再起動

ブラウザでの制御画面

Pi – WebIOPi

随分前に設定して動作させた WebIOPi を最新 Ver で再設定してみた。
OS = Raspbian 2017-01-11-raspbian-jessie-lite

WebIOPi は python 3 での起動なので、3 をインストールし標準を 2 → 3 へ切替。
WebIOPi の setup で、python 2 のライブラリもインストールされるので
事前に入れて構築した。

■ 必要と思われる物
以下を apt-get で install
libi2c-dev・git-core・python-apt・python-dev・python-setuptools・python-pkg-resources・python3・python3-apt・python3-smbus・
python3-dev・python3-setuptools・python3-pkg-resources

■ python 3 へ切替
# update-alternatives –install /usr/bin/python python /usr/bin/python2.7 1
# update-alternatives –install /usr/bin/python python /usr/bin/python3.4 2

■ WebIOPi
# cd /usr/local/src ( 任意の場所 )
# wget http://jaist.dl.sourceforge.net/project/webiopi/WebIOPi-0.7.1.tar.gz
# tar zxvf WebIOPi-0.7.1.tar.gz
# cd ./WebIOPi-0.7.1
[pi2・pi3 の 40pin 対応]
# wget https://raw.githubusercontent.com/doublebind/raspi/master/webiopi-pi2bplus.patch
# patch -p1 -i webiopi-pi2bplus.patch
# ./setup.sh
[boot 起動用ファイル]
# wget https://raw.githubusercontent.com/neuralassembly/raspi/master/webiopi.service
# mv webiopi.service /etc/systemd/system/

■ wiringPi
# apt-get -y install wiringpi

■ WiringPi2-Python
# cd /usr/local/src ( 任意の場所 )
# git clone https://github.com/neuralassembly/WiringPi2-Python.git
# cd ./WiringPi2-Python
# python3 setup.py install

■ WebIOPi 起動設定
start
# systemctl start webiopi.service
boot-start
# systemctl enable webiopi.service

■ 起動確認
http://[pi-IP]:8000
ユーザー名:webiopi
パスワード:raspberry