mieki256's diary



2019/11/01(金) [n年前の日記]

#1 [raspberrypi] Raspbian busterをクリーンインストールした

昨日、Raspberry Pi Zero W の Raspbian stretch を Raspbian buster にアップグレードしたけれど。Java関係がインストールできなかった点が気になってしまって、結局 buster をクリーンインストールしてしまった。一応、作業手順をメモ。Windows10 x64 1903 上で、microSD への書き込み作業をした。

公式サイトから、OSイメージのzipをDL。

_Download Raspbian for Raspberry Pi

今回は、アプリも全部入りらしい、Raspbian Buster with desktop and recommended software を選んだ。zip を解凍すると、2019-09-26-raspbian-buster-full.img が得られる。6.3GBほどのファイル。

microSD を、SD card formatter 5.0.1 でフォーマット。

_SDメモリカードフォーマッター - SD Association

microSDへの書き込みは、balenaEtcher を使用。OSイメージ(.img)を書き込んでやる。

_balenaEtcher - Home
_balenaEtcherでOS「Raspbian」を書き込む [2018年まとめ]

書き込みが終わったら、microSD上のbootパーティションに、2つほどファイルを作成する。ちなみに、bootパーティションは、Windowsからもアクセスできるフォーマットになっている。

一つ目。ssh という名前の空のファイルを作成。この名前のファイル名があることで、Raspbian起動時に、ssh を有効にした状態で起動してくれるらしい。

_RaspbianをインストールするときSSHを有効化する方法

二つ目。bootパーティション内に、wpa_supplicant.conf ファイルを作成。無線LAN(Wi-Fi)設定を記述しておくことで、Raspbian の初回起動時に、無線LAN設定済みの状態で起動してくれるらしい。

_Raspberry Pi のWi-Fi設定を事前に用意しておこう!

暗号化パスワードは、VMware Player + Ubuntu Linux 18.04 LTS 上で、wpa_passphrase を使って求めた。

wpa_passphrase SSID 平文パスワード

書き込みが終わった microSD を、Raspberry Pi Zero W に差して、電源等を繋いで起動。特に何の問題も起きずに起動してくれた。

追加ユーザのホームディレクトリ以下が日本語のまま。 :

アレコレ初期設定をしていったところ、追加ユーザのホームディレクトリ以下が日本語のディレクトリになってることに気づいた。CUIでアクセスする際、日本語が混ざっていると入力が面倒臭いので、英語ディレクトリ名にしておきたい。

一般的には、xdg-user-dirs-gtk-update を使えば変更できるはずだが…。

sudo apt install xdg-user-dirs-gtk
LANG=C xdg-user-dirs-gtk-update

何故か、Raspbian buster では、この処理ができなかった。打ち込んでも無反応。ディレクトリ名を変更してくれる、例のダイアログが出てこない。

仕方ないので、設定ファイルを直接書き換えたり、ディレクトリ名を直接変更して対処することにした。

_「デスクトップ」等のディレクトリ名を英語にする - Qiita

cat ~/.config/user-dirs.dirs
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run.
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
#
XDG_DESKTOP_DIR="$HOME/デスクトップ"
XDG_DOWNLOAD_DIR="$HOME/ダウンロード"
XDG_TEMPLATES_DIR="$HOME/テンプレート"
XDG_PUBLICSHARE_DIR="$HOME/公開"
XDG_DOCUMENTS_DIR="$HOME/ドキュメント"
XDG_MUSIC_DIR="$HOME/音楽"
XDG_PICTURES_DIR="$HOME/画像"
XDG_VIDEOS_DIR="$HOME/ビデオ"

このファイルの内容を、以下に書き換える。

XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_VIDEOS_DIR="$HOME/Videos"

ユーザディレクトリに対するロケール設定も確認。

cat ~/.config/user-dirs.locale
ja_JP

このファイルの内容も、以下に変更。

en_GB

ディレクトリ名を変更。

mv デスクトップ/ Desktop/
mv ダウンロード/ Downloads/
mv テンプレート/ Templates/
mv 公開/ Public/
mv ドキュメント/ Documents/
mv 音楽/ Music/
mv 画像/ Pictures/
mv ビデオ/ Videos/

ここまで作業してから、一旦ログアウトして、再度ログイン。

再ログイン時、「言語が違うけどディレクトリ名を変更するか?」的内容の、見慣れたダイアログが表示された。何故今頃表示される…。お前、さっきは働いてなかったやんけ…。

とりあえず、「次回から表示しない」にチェックを入れて、「古い名前のままにする」を選んだ。これで一応目的は果たせるだろう…。たぶん。

ただ、その後も試していたら、LANG=C ではなく LC_ALL=C を指定すれば、例のダイアログが表示されることに気が付いた。

LC_ALL=C xdg-user-dirs-gtk-update

もしかして、この指定で済ませれば良かったのだろうか、しかし、こんな指定でも正しいのか、問題は起きないのか、そのあたりはよく分からない…。

デスクトップ用途は厳しい。 :

久々に Raspberry Pi Zero W を起動したけど、デスクトップ用途で使うのはあまりにも厳し過ぎる…。Webブラウザすら起動しない…。いや、数分待てば起動するけど、そこから先、Webサイトが開けない…。

子供さんの教育用として与えるなら、最低でも Raspberry Pi 3 から、なのではあるまいか。Zero系を触らせるのは、ある種の児童虐待、とすら思えてくる。そのぐらい、Zero系は遅いなと。

いやまあ、LEDをチカチカさせるとか、モータを制御するとか、そういう用途だけなら Zero系でもいいのだろうけど。Zero W はピンヘッダを自分で半田付けしないといかんからアレだけど、Zero WH なら最初からピンヘッダが半田付けしてあるらしいので、そういう用途で使いやすいだろうし。

#2 [kivy][python] Kivyを少し勉強中

Pythonで使えるGUIライブラリは色々あるけど、Kivy なるライブラリが一時期盛り上がっていたようなので、少し勉強中。環境は Windows10 x64 1903 + Python 3.7.5 32bit + Kivy 1.11.1。

インストール。 :

以下を参考にして作業。

_Installation on Windows(翻訳済み) - Kivy 1.10.0 ドキュメント
_Installation on Windows - Kivy 1.11.1 documentation

python -m pip install --upgrade pip wheel setuptools
python -m pip install --upgrade docutils pygments pypiwin32 kivy-deps.sdl2 kivy-deps.glew
python -m pip install kivy-deps.gstreamer
python -m pip install kivy-deps.angle
python -m pip install Kivy
python -m pip install kivy-examples

HwlloWorld。 :

以下を参考にして作業。

_Kivyの環境構築からHello Worldと表示するまで - Qiita
_Kivyを使ってアプリを作ろう(初歩の初歩から始めよう) - Qiita

ソースリスト内でWidgetの配置を決める書き方と、.kvファイルを用意してそちらにレイアウトやWidget種類を列挙する書き方があるらしい。

HogefugaAppクラスが使う .kv ファイルは、hogefuga.kv になる模様。

画像表示。 :

ここまではできた。 :

ひとまず、ボタンをクリックすると画像が変わる、かつ、画像は Pillow で開いて Kivy の Texture に変換するところまでは動作確認ができた。せっかく Pillow で開いてることだし、途中でグレイスケールに変換してみる処理も入れてある。

kivy_display_image_ss01.gif

_03_imageapp_use_texture.py
from PIL import Image
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import StringProperty, ObjectProperty
from kivy.graphics.texture import Texture
from kivy.config import Config
Config.set('graphics', 'width', '640')
Config.set('graphics', 'height', '640')


image_files = [
    "./sample1.png",
    "./sample2.png",
    "./sample3.png",
]


class ImagechgWidget(Widget):
    image_texture = ObjectProperty(None)
    text = StringProperty('')

    def __init__(self, **kwargs):
        super(ImagechgWidget, self).__init__(**kwargs)
        self.image_texture = Texture.create(size=(512, 512))

    def buttonClicked(self):
        self.loadimage(image_files[0])

    def buttonClicked2(self):
        self.loadimage(image_files[1])

    def buttonClicked3(self):
        self.loadimage(image_files[2])

    def loadimage(self, fn):
        self.text = fn
        self.image_texture = image_to_texture(fn)


class Imagechg2App(App):
    def __init__(self, **kwargs):
        super(Imagechg2App, self).__init__(**kwargs)
        self.title = 'Image change'

    def build(self):
        return ImagechgWidget()


def image_to_texture(filepath):
    """Convert Piloow Image to Kivy Texture."""
    img = Image.open(filepath, 'r')

    # convert grayscale for Pillow
    img = img.convert('L').convert('RGB')

    tex = Texture.create(size=img.size)
    tex.blit_buffer(img.tobytes())
    tex.flip_vertical()
    return tex


if __name__ == "__main__":
    Imagechg2App().run()

_imagechg2.kv
#:kivy 1.10.1
#
# add comment

ImagechgWidget:

<ImagechgWidget>:
    BoxLayout:
        size: root.size
        orientation: "vertical"

        Image:
            id: image1
            size_hint_y: 0.9
            texture: root.image_texture

            canvas.before:
                Color:
                    rgba: 0, 0, 0, 1
                Rectangle:
                    pos: self.pos
                    size: self.size

        Label:
            id: label_pathname
            text: root.text
            font_size: 16
            size_hint_y: 0.05
            color: 0.8, 0.8, 0.8, 1

            canvas.before:
                Color:
                    rgba: 0.2, 0.2, 0.2, 1
                Rectangle:
                    pos: self.pos
                    size: self.size

        BoxLayout:
            size_hint_y: 0.05

            Button:
                id: button1
                text: "Image 1"
                on_press: root.buttonClicked()

            Button:
                id: button2
                text: "Image 2"
                on_press: root.buttonClicked2()

            Button:
                id: button3
                text: "Image 3"
                on_press: root.buttonClicked3()

_sample1.png
_sample2.png
_sample3.png

課題。 :

上記の例は Kivy の texture で画像表示しているけれど。texture ではなく、canvas に何かしらを描いて、それを表示したり、画像ファイルとして保存したり、ということをやってみたいわけで。

しかし、canvas の内容を書き換える感じの処理では、ウインドウ全体に対して描画が行われてしまうようで、位置合わせが面倒だったり、配置したボタン等が、上書きで消されてしまったりする。

さて、どうしたもんだろう…。

Pillow で描いておいてから Kivy の texture にするのはどうか。Pillow も、ImageDraw を使えば図形描画ができるようだし。

_ImageDraw Module - Pillow (PIL Fork) 2.6.1 documentation

アンチエイリアスをかけた状態で描けないのがアレだけど…。

aggdraw を使えばより高度な描画ができる、と書いてあることに気づいた。

_The aggdraw Module

以上、1 日分です。

過去ログ表示

Prev - 2019/11 - Next
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project