RaspPi アナログ入力

RasPiにMCP3008とボリューム繋いでアナログ入力テスト。

MCP3008

#!/usr/bin/env python
# -*- coding:utf-8 -*-

#
# MCP3008 にボリュームを繋いでアナログ入力テスト
#
# 参考
# https://www.denshi.club/pc/raspi/5-mcp3208.html

import spidev, time

spi = spidev.SpiDev()
spi.open(0,0)
spi.max_speed_hz = 1000000  #転送速度 1MHz

def analog_read(channel):
    adc = spi.xfer2([1,(8+channel)<<4,0])
    data = ((adc[1]& 3) << 8) + adc[2]
    return data

while True:
    for i in range(2):
        reading = analog_read(i)
        voltage = reading * 5 / 1024
        print("ch:", i, "Reading=%d  tViltage=%f" % (reading,  voltage))
        time.sleep(1)

インストール後

$ apt update

ユーザー追加

$ sudo adduser shimozomeya

ユーザーを sudo に追加

$ sudo visudo

pomera(デフォルトユーザー)の所属しているグループを確認

$ sudo groups pomera
pomera : pomera lp sudo video

アプリインストール(Thonny)

$ sudo apt install thonny

ポメラLinux化

ichinomoto様が解析、作成したツール、ファイルを使わせていただきポメラLinux化した。

www.ekesete.net

Debian on Pomera DM200 も購入させていただきました。難しいことはわからないけど、読んでてわくわくする。

ekesete.booth.pm

Wifiが動かない

Linuxはすんなり起動したのだが、

$ sudo /opt/bin/wifi_switch on

としても

Error for wireless request "Set Power Management" (8B2C) :
     SET failed on device wlan0 ; Interrupted system call.
Successfully initialized wpa_supplicant

$ Could not set interface wlan0 flags (UP): Operetion not permitted
nl80211: Could not set interface 'wlan0' UP
nl80211: deinit ifname=wlan0 disabled_11b_rates=0
Could not set interface wlan0 flags (UP): Operation not permitted
WEXT: Could not set interface 'wlan0' UP
wlan0: Failed to initialize driver interface

と出てwifiが動かない。

ポメラのソフトウェアバージョン

ポメラのソフトウェアバージョンは購入したときから Ver.1.1.0.0 でした。 これだと DM200 と思って?しまうらしい。

dm200_wireless ファイルを修正しました。

$ sudo vi /etc/init.d/dm200_wireless
#!/bin/sh

WIFI_SETTING_FILE=/mnt/sd/settings/wpa_supplicant.conf

#if [ `cat /proc/meminfo | awk 'NR==1 {print $2}'` -eq 1026076 ]; then  ← コメント
if [ -b /dev/mmcblk0p27 ]; then     #    ← こちらに変更                                                             
   MODEL="DM250"
else
   MODEL="DM200"
fi

これで無事wifiも使えるようになりました。

ichinomoto様、その他ネットやTwetterに有用な情報を載せていただいている皆様ありがとうございます。

ポメラの天板

ポメラの天板。やたら手の油?がついて汚い(自分の手が汚いのか...)ので対策

ダイソーでリメイクシートというものを買ってきた。カッティングシートみたいなの

リメイクシート

どうせうまく貼れないので、端は初めからさけておく。大理石柄 なにやらあまりかっこよくない... でも汚れは目立たないのでしばらく様子見

大理石柄

ブラウザからGPIOを使ってみる

lighttpdインストール

$ sudo apt install lighttpd

http://raspberrypi.local/ にアクセスしてページ表示を確認

lighttpdの設定ファイル複製しておく
$ sudo cp /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.org

cgiを有効にする。

$ sudo lighttpd-enable-mod cgi
lighttpdを再起動
$ sudo service lighttpd force-reload

cgi設定

10-cgi.conf を修正

/etc/lighttpd/conf-available/10-cgi.conf

オリジナルを保存しとく
$ sudo cp /etc/lighttpd/conf-available/10-cgi.conf /etc/lighttpd/conf-available/10-cgi.conf.org

下記を修正

$HTTP["url"] =~ "^/cgi-bin/" {
        cgi.assign =( ".py" => "/usr/bin/python" )
        alias.url += ( "/cgi-bin/" => "/usr/lib/cgi-bin/" )
}

lighttpdを再起動

いろいろ参考にして

いろいろなページを参考にさせていただいて

〇index.html

$ sudo vi /var/www/html/index.html

cgiプログラム

$ sudo vi /usr/lib/cgi-bin/formcgi.py

を作りました。

ランタイムエラー

GPIOのところはRPi.GPIOを使用しているのですが、CGIを呼ぶと ランタイムエラー が表示されました。

RPi.GPIOとか使うにはroot権限が必要らしい。

ユーザー www-data をgpioグループに追加

$ sudo adduser www-data gpio

ラズパイを再起動したら動きました。

正しいやり方なのか?

index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>RasPi GPIO TEST</title>
</head>

<body>

<h1>GPIO 送信テスト</h1>

<form action="/cgi-bin/formcgi.py" method="post">
    <input type="submit" value="ON" name="onpb">
    <input type="submit" value="OFF" name="offpb">
</form>

</body>
</html>

formcgi.py

#!usr/bin/python

import cgi
import cgitb
import RPi.GPIO as GPIO

cgitb.enable()

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)

form = cgi.FieldStorage()

if (form.getvalue('onpb')):
    GPIO.output(18, True)
    str1=('ON')

if (form.getvalue('offpb')):
    GPIO.output(18, False)
    str1=('OFF')
    GPIO.cleanup()

print("Content-Type: text/html")
print()
htmlTxt = '''
<html>
<head>
<meta charset="utf-8">
<title>Get PB Submit</title>
</head>
<body>
<h1>受信ボタン : {getmsg}</h1>
<a href="../index.html">戻る</a>
</body>
</html>
'''.format(getmsg = str1)
print(htmlTxt)