2019年4月23日火曜日

Raspberry Pi にsamba を設定してwindows7 / 10で共有する

何も考えずにやったら、動かない(笑)

sudo apt-get -y update; sudo apt-get -y upgrade
sudo apt-get install samba
sudo vi /etc/samba/smbd.conf

設定ファイルの最後に追加、ネット見ながら設定

[WareHouseDB2]
   comment = Raspberry Pi
   path = /home/pi/Public
   guest ok = yes
   read only = no
   browsable = no
   force user = pi

sudo systemctl restart smbd

windows PCで、、、
あれ?見えない。

sudo systemctl status smbd

あれ?ない

sudo systemctl enable smbd
sudo systemctl start smbd

さぁ!

あれ?見えない。うーーーん

smbd.conf .....

あっ、、、
browsable = no
これを、
browsable = yes

sudo systemctl restart smbd

おおお!!!

Peace!!

2019年4月22日月曜日

Raspberry Piに lighttpd をインストールするスクリプト

僕の環境でlighttpdを一発で設定するスクリプト。
いくつか投稿しているけど、これが今の最新版。

ただし、/etc/lighttpd 以下は設定しない。
/etc/lighttpdの設定が必要な場合はこちら(step3,step4後半)を参照。

僕は、多数のRaspberry Piを使っている。その為に、PCでRasbianをSDカードを書き込んだ直後に/bootに環境設定用のデータを書き込み、それを最初のRaspberry Pi立上げ時に、シェルスクリプトでインストールする。
その時に、/etc/lighttpdも、設定してしまう。

それを前提にして、こんな感じで処理をする。

#!/bin/bash

HOME=/home/pi
VER=1.4.53

if [ -e $HOME/tmp ]; then
    cd $HOME/tmp
else
    mkdir $HOME/tmp
    cd $HOME/tmp
fi

##########################
# 1. build lighttpd
wget https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-$VER.tar.gz
tar xvf lighttpd-$VER.tar.gz
cd  lighttpd-$VER
sudo apt-get -y install libpcre3-dev bzip2 libbz2-dev
./configure
make
sudo make install
sudo ldconfig

##########################
# 2. setup systemd
sudo mkdir /var/log/lighttpd
sudo chown www-data:www-data /var/log/lighttpd

cp  doc/systemd/lighttpd.service  doc/systemd/lighttpd.org
sed -i -e "s/sbin/local\/sbin/g" doc/systemd/lighttpd.service
sudo cp doc/systemd/lighttpd.service /lib/systemd/system
sudo systemctl enable lighttpd.service
sleep 1
sudo systemctl start lighttpd.service

##########################
# 3. test lighttpd
sudo mkdir /var/www
sudo mkdir /var/www/api

cat << EOF > index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>lighttpd alive</title>
</head>
<body>
<p>lighttpd server success/p>
</body>
</html>
EOF

sudo cat << EOF > tst.c
#include <stdio.h>
void main(){
    printf("Content-type: text/plain\n\n");
    printf("Hello, World!");
    return;
}
EOF

gcc tst.c -o tst

sudo mv index.html /var/www
sudo mv tst.c /var/www/api
sudo mv tst /var/www/api
sudo chown -R www-data:www-data /var/www

exit 0

シェルは、これで終わり

次に確認で、以下の2つをブラウザーから順番に確認
http://192.168.xxx.yyy
http://192.168.xxx.yyy/api/test

これでうまくいけば、OK

Peace!!

2019年4月20日土曜日

合体(I2CキャラクターLCD & Full color LED PL9823 )

ロボット内の状態を外部から確認できるように、
ディスプレーと、LEDは必要
音も必要かなぁ。それは後、、、
まずは、スマフォで確認するよりはユーザに優しい
C言語で書いたから、負荷も最小限。
Pythonではこうはいかない。
性能を考えれば、少しでも軽く、早く!

今は、そういう時代ではないけどね。




Peace !!

2019年4月19日金曜日

Raspberry Pi でキャラクターディスプレーを使う


Raspberry Piで処理している情報を表示するために、16桁2行のモジュールを使う


Raspberry Piに接続した情報が多い これ(秋月のページ)を使う。
あと、家にあったので可変抵抗(100Ω)を使います。
V0に入力する電圧でデイスプレーの表示を調整するためです。
固定の抵抗を組み合わせてもよいし、モジュールの説明書にある回路でも良いと思います。

ところでi2c接続なので、
i2cdetect -y 1
とすると見えるはずですが「見えない」。
見えない事は気にしないで進める。
色々調べると、モジュールのPICの処理に問題があるようで0x50に出てこない。
スレーブアドレス:0x50
レジスタアドレス:
 コマンド 0x00
 データ    0x80

基本的なツールのインストール
sudo apt-get install i2c-tools python-smbus

ドライバーのインストール(これは大事です)
sudo rmmod i2c-dev i2c-bcm2708         (おまじない)
sudo modprobe i2c-bcm2708; sudo modprobe i2c-dev

ボレートを設定します。
sudo vi /boot/config.txt
dtparam=i2c_baudrate=50000

reboot

テスト表示
sudo i2cset -y 1 0x50 0x00 0x01
sudo i2cset -y 1 0x50 0x00 0x38
sudo i2cset -y 1 0x50 0x00 0x0c
sudo i2cset -y 1 0x50 0x00 0x06
sudo i2cset -y 1 0x50 0x80 0x41
sudo i2cset -y 1 0x50 0x00 0xc0
sudo i2cset -y 1 0x50 0x80 0x42

sudo i2cset -y 1 0x50 0x00 0x01;sudo i2cset -y 1 0x50 0x00 0x38;sudo i2cset -y 1 0x50 0x00 0x0c;sudo i2cset -y 1 0x50 0x00 0x06;sudo i2cset -y 1 0x50 0x80 0x41;sudo i2cset -y 1 0x50 0x00 0xc0;sudo i2cset -y 1 0x50 0x80 0x42

これは、Aを表示するための設定
0x01 : Clear Display
0x38 : Set 2lines
0x0c : display on, no cursor
0x06 : no shift
0xc0 : return

0x41 : 文字 A
0x42 : 文字 B


Peace !!

2019年4月18日木曜日

フルカラー LED PL9823-F8 を Raspberry Piで使うメモ

マイコン搭載のPL9823-F8を、Raspberry Piでつかうためのメモ。
PL9823-F8は、秋月で購入。

こちらで書かれている事のポイントを実施しながら自分用にまとめました。
元の原稿は良く説明されていて解りやすいです。
感謝 m(__)m

ただ、Pythonのプログラムは、NeoPixel が開発したものであり、
このPython Libralyが本当の肝。
サンプルプログラムは、Ctl-Cがきちんと処理されていないので、
その部分だけ、下記のように直せばよい。
strandtest.py のif __name__ == '__main__': 部分の最後
Ctl-Cを受けるところが下記ようになっているが、それを修正する

修正前
    except KeyboardInterrupt:
        if args.clear:
            colorWipe(strip, Color(0,0,0), 10)
修正後
    except KeyboardInterrupt:
        colorWipe(strip, Color(0,0,0))

        if args.clear:
            colorWipe(strip, Color(0,0,0), 10)

ポイントは、PL9823-F8 に内臓されているマイコンWS2812の制御モジュール。
これは、公開されている。それを使ってPL9823-F8を制御する。

(1) /boot/config.txt の変更
# dtparam=audio=on

sudo sed -i -e "s/^dtparam=audio=on/# dtparam=audio=on/g" /boot/config.txt

(2) 必要なモジュールのインストール
cd ~/prj
僕は、開発するディレクトリーとして~/prjを使っている。
プロジェクト毎にディレクトリーを作って管理している。
理由は、バックアップや複数のRaspberry Piを使っているので管理が楽だから。
例えは、ロボット一台に3つのRaspberry Piなんかつかうし、ルール決めて管理しないと大変です。脱線した(笑)

sudo apt-get -y install build-essential python-dev git scons swig
git clone https://github.com/jgarff/rpi_ws281x.git
cd rpi_ws281x
scons
cd python
sudo python setup.py install
cd examples
vi strandtest.py
sudo sed -i -e "s/^LED_COUNT      = 16/LED_COUNT      = 8 /g" strandtest.py
sudo sed -i -e "s/^LED_PIN        = 18/LED_PIN        = 12/g" strandtest.py
sudo sed -i -e "s/^LED_BRIGHTNESS = 255/LED_BRIGHTNESS = 8  /g" strandtest.py


配線は、こんな感じ
GNDは、一番長い端子
VDDには100Ωの抵抗をはさんでRaspberry Piの3.3V電源を使っている
DINは、GPIO12
DOは使っていない




Peace!!

以下は、点灯したままのLEDを消すプログラムでけど、
上記のCtl-Cを処理する部分を加えれば使わない。


# NeoPixel library strandtest example
# Author: Tony DiCola (tony@tonydicola.com)
#
# Direct port of the Arduino NeoPixel library strandtest example.  Showcases
# various animations on a strip of NeoPixels.
import time

from neopixel import *

# LED strip configuration:
LED_COUNT      = 8       # Number of LED pixels.
LED_PIN        = 12      # GPIO pin connected to the pixels (must support PWM!).
LED_FREQ_HZ    = 800000  # LED signal frequency in hertz (usually 800khz)
LED_DMA        = 5       # DMA channel to use for generating signal (try 5)
LED_BRIGHTNESS = 8       # Set to 0 for darkest and 255 for brightest
LED_INVERT     = False   # True to invert the signal (when using NPN transistor level shift)

# Define functions which animate LEDs in various ways.
def colorWipe(strip, color, wait_ms=0):
        """Wipe color across display a pixel at a time."""
        for i in range(strip.numPixels()):
                strip.setPixelColor(i, color)
                strip.show()
                time.sleep(wait_ms/1000.0)

# Main program logic follows:
if __name__ == '__main__':
        # Create NeoPixel object with appropriate configuration.
        strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS)
        # Intialize the library (must be called once before other functions).
        strip.begin()

        colorWipe(strip, Color(0, 0, 0))  # clear wipe