All posts by admin

Pi (7) RealVNC

Raspberry Pi に毎回 HDMI・キーボ・マウスをつなぐのが面倒、SSHはまた慣れてない、MacとかからGUIで触れるようにしたい。その場合RealVNCを利用という選択肢があります。

Raspbian OSにはVNCサーバ(RealVNC)が組み込まれていますが、既定では無効になっています。

VNCを有効にする

これを有効化すればVNCクライアントから接続できるようになります。

Raspberry Pi を起動してデスクトップ画面が表示されたら、メニューバー左端のラズベリーアイコンをクリックします。
表示されたプルダウンメニューから [設定]-[Raspberry Piの設定]をクリックします。

「Raspberry Piの設定」画面で「インタフェース」タブをクリックし、[VNC]の「有効」を選択してから[OK]ボタンをクリックします。

VNCビューアのインストール

RealVNCと互換性のあるVNCクライアントアプリを用意してください。

(macOSの場合、VNCクライアントなくでも、Finderから利用できます。)

Download VNC Viewer to the device

使用しているPCがMacの場合は、上記サイトを開いてから [macOS] アイコンをクリックしてください。
その後、画面中央の [DOWNLOAD VNC VIEWER]をクリックしてインストールイメージ(dmgファイル)をダウンロードします。

MacのFinderからVNCで接続するには
  1. 起動方法は簡単です。 Finderを起動して、メニューバーの「移動」ー「サーバへ接続」を選択します。 …
  2. サーバアドレスには「vpn://220.99.0.xx:ポート番号」の書式で入力します。 …
  3. 認証画面が表示されますので、VNCサーバで指定しているパスワードを入力します。

VNCビューアの起動

インストールされた「VNC Viewer」を起動します。
初期起動画面が表示されるので、そのまま[GOT IT]ボタンをクリックします。

ビューア画面が表示されたら、アドレス入力欄に Raspberry Pi のIPアドレスを入力して [enter]キーを押下します。

ログインユーザ名とパスワードを入力して [OK]ボタンをクリックします。

 

Ubuntu で Dropbox

Dropboxをインストールすれば、WindowsやmacOSなどとファイルをやり取りするのが簡単になる。また、出先でスマートフォンなどから同期したファイルを見ることもできる。

経緯

UbuntuでArduino IDEを試すため、最新版Ubuntu 18.04 LTSへアップグレードした。Arduino IDEの動作も確認した。

今度MacbookまたはWindows版で開発したArduinoプログラムの同期方法を考えた。

Macbook同士はiCloud便利だが、Windows環境でも動くのは、DropboxとGoogle Driveになる。

Ubuntuでは、Google Driveは不安定と言う記事が多数見受けるので、Dropboxにチョイス。

GUI で入れてみる

Ubuntuデスクトップのメニューから、「ソフトウェア」というアプリケーションがあり、そこからDropboxを検索し、インストールができた。

CUI で入れる

手持ちの3台は「ソフトウェア」というアプリケーションからDropboxを見つけ、インストールができた。もう一台はどうしても見つからない、どういうことだね?

Ubuntuのレポジトリで、「nautilus-dropbox」パッケージが提供されてる。

以下のリンクをクリックしてインストールできる。

 

以下のコマンドでインストールすることもできる。

sudo apt install -y nautilus-dropbox

ると、以下のダイアログが表示され、「OK」をクリックすると、Dropboxデーモンプログラムがダウンロード、インストールされる。

デーモンプログラムのインストールが完了すると、ブラウザが開られて、既にアカウントを持っているなら、メールアドレスとパスワードを入力し、Ubuntuをリンクできる。ただし、リンクすると同期済みのファイルがUbuntuにもコピーされるので、ファイルシステムの空き容量が十分にあることを確認してから実行する。

アカウントを持っていないなら、「アカウントを作成」をクリックして登録してから、Ubuntuをリンクできる。

参考

  1. https://www.imuza.com/entry/2018/02/22/212055
  2. https://linuxfan.info/dropbox-on-ubuntu

Ubuntu upgrade

経緯

今までArduino IDEのMacbookまたはWindows版を利用している。ESP8266/WeMosに限って、よくクラッシュする。

同じシリアルCH340を使う、安価のUno、Nanoは普通に使えるので、シリアルドライバーではなく、WeMos、ESP8266に関する何か異変があると思う。

頻繁にクラッシュするから仕事進まないと困る。Ubuntuで安定するかを試すことに。

しかし、手持ちのいくつUbuntuは一年くらい放置して、コンパイルできない問題発生。最新版Ubuntu 18.04 LTSへアップグレードを試み。

結論からいうと、問題が残りがあるもので、アップグレードは成功。

16.04 LTSから18.04 LTS

こちらは、順調にUbuntu 18.04 LTSにアップできた。

今回の件で、安定した環境を求めるなら、Ubuntu LTSが自分に向いてると思った。

17.04から18.04 LTS

こちらは、直接18.04 LTSにアップできないと言われて。新規インストールが勧められて・・・。

もう一つの方法は、一旦17.10へアップして、それから18.04 LTSへアップする方法。時間がかかりそうだが、必要な操作が少ない、パソコンが働くので、人間にとっては楽。結局この方法で進み、うまくできた。

apt-get update が404になる問題が発生、参考1で解決。

参考

  1. https://qiita.com/nyanchu/items/a8cfc5cf627d70d798bf — Ubuntu で apt-get update が404になる問題

 

 

 

Raspberry Pi (9) Waveshare 2.13inch e-Paper HAT

経緯

低消耗電力、停電でも表示する e-Paperが興味があり、そのRaspberry Pi HATを手に入れた。

ハードウェア

このRaspberry Pi Waveshare 2.13inch e-Paper HATは、Raspberry Pi 2/3/Zero対応する。

ソフトウェア

wiringpiのインストール

root@raspberrypizero004:/home/pi# pip3 search wiringpi
wiringpi (2.46.0) – A python interface to WiringPi 2.0 library which allows for easily
interfacing with the GPIO pins of the Raspberry Pi. Also supports i2c and
SPI.
wiringpi2 (2.32.3) – A python interface to WiringPi 2.0 library which allows for easily
interfacing with the GPIO pins of the Raspberry Pi. Also supports i2c
and SPI
root@raspberrypizero004:/home/pi# pip3 install wiringpi
root@raspberrypizero004:/home/pi# gpio -v
gpio version: 2.46
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty
動作確認する
Raspberry Pi Details:
Type: Pi Zero-W, Revision: 01, Memory: 512MB, Maker: Sony
* Device tree is enabled.
*–> Raspberry Pi Zero W Rev 1.1
* This Raspberry Pi supports user-level GPIO access.
root@raspberrypizero004:/home/pi#

Python関連のインストール

28 sudo apt-get install python-dev
29 sudo apt install python-rpi.gpio
30 sudo apt install python-smbus
31 sudo apt install python-serial
32 sudo apt install python-spidev
33 sudo apt install python-imaging
34 sudo raspi-config
35 sudo vi /etc/modules
下記の2行を追加する
i2c-bcm2708
i2c-dev

検証

demo codeのダウンロードと解凍
36 wget https://www.waveshare.com/w/upload/3/3f/2.13inch-e-paper-hat-b-code.7z
39 sudo apt install p7zip-full
62 mkdir 2.13inch-e-paper-hat-b-code
63 cd 2.13inch-e-paper-hat-b-code/
64 7z x ../2.13inch-e-paper-hat-b-code.7z
65 ls

pythonで試す

66 python raspberrypi/python/main.py
71 cd raspberrypi/
73 cd python/
75 python main.py

wiringpiで試す

76 cd ..
79 cd wiringpi/
81 make
85 ./epd

 

参考

  1. http://www.waveshare.net/wiki/2.13inch_e-Paper_HAT_(B)
  2. https://relativelayout.hatenablog.com/entry/2018/02/17/234348 — Waveshare 2.13inch e-Paper HAT (B)を買って3色電子ペーパーを楽しむ(環境構築編)

Pi (6) USB to PC (2)

USB を通して、 PCに接続する 2nd実験。

USBアダプターの購入

RaspberryのUSB Connector Expansion Boardが安く売っているので、導入することに。

「ラズパイzero w usb」の画像検索結果

接続実験

SB を通して、 PCに接続する 実験は、以前できたことで、ハードウェア繋ぐだけで動くはずだが、苦労した。

ラズパイZeroまたはZero WをUSBケーブル1本でPCやMacに接続する方法は、いつの間にうまくいかなくなった。

つまり、ssh pi@raspberrypi.local がうまく繋がらない。

Raspberry Pi (8) Nokia 5110 LCD 2nd

一年前にNokia 5110 LCDの表示が出来たが、今回はそれをRaspberry Pi に組み込み、されにボタンを追加する。

ボタンは短押し検知すると、LCDのバックライトのon/offで、さらに長押しすると、Raspberry Piシャットダウン機能も持たせる。

GPIOへのスイッチオン・オフ検知回路。

sw1

Pythonプログラム

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import time
import RPi.GPIO as GPIO
import os

# LEDのGPIOピンの番号、センサーのGPIOピンの番号
let_pin = 18
sw1_pin = 16
sleeptime = 1
led_01 = 0
GPIO.setmode(GPIO.BCM)
GPIO.setup(sw1_pin, GPIO.IN)
GPIO.setup(let_pin, GPIO.OUT)
GPIO.output(let_pin, GPIO.LOW)
def switch_detected(sw1_pin):
  global led_01
  led_01 = 1 - led_01
  if led_01 == 1:
    # 点灯
    GPIO.output(let_pin, GPIO.HIGH)
  else:
    # 消灯
    GPIO.output(let_pin, GPIO.LOW)

  sw_counter = 0
  while True:
      sw_status = GPIO.input(sw1_pin)
      if sw_status == 0:
          sw_counter = sw_counter + 1
          if sw_counter >= 50:
              print("長押し検知!")
              os.system("sudo shutdown -h now")
              break
      else:
          print("短押し検知")
          break

      time.sleep(0.01)
  time.sleep(sleeptime)

# コールバック登録
GPIO.add_event_detect(sw1_pin, GPIO.FALLING, callback=switch_detected)
try:
  print "ctrl+c  :  if you want to stop app"
  print "App Start"
  while True:
    time.sleep(sleeptime)
except KeyboardInterrupt:
  print "Quit"
finally:
  print "clean up"
  GPIO.cleanup()

これを起動時自動的に作動する必要がある。

参考:

  • https://qiita.com/clses/items/e701c1cb6490751a6040 – ラズパイでシャットダウンボタンを付ける(ついでに起動ボタン)

Onion Omegaが届いた

5月にKickStater注文したOnion Omegaが、忘れかけたころに、届いた。

Onion Omegaとは、Build Hardware with JavaScript, Python, PHPという、非常に小型のLinuxコンピューター。Wifiを搭載しており、クラウドなどにデータを送ることが出来るのが特徴。

大きさ: 28.2mm x 42mm
CPU: Atheros AR9331 400MHZ MIPS (Wifiを積んでいるSoCです)
RAM: 64MB
Flash: 16MB

WiFi: 802.11b/g/n 150Mbps
GPIO: 18ピン
USB: USB 2.0

入力電圧: 3.3V
消費電力: 0.6W

 

2015-10-26 14.43.34

黄色封筒に、本体、ドック、リレーモジュール、ミニドック(おまけの)、4つ小箱に入ってる。

 2015-12-01 18.14.34

ドックに本体、リレーモジュールを取り付けた様子。

電源を付けて、https://wiki.onion.io/ をみながら、Getting Started.

そこまでWebでWiFi設定、アップグレード画面見れて良かったが、

Flash: 16MBしかないので、USB メモリでRootfsすると、WiKiみながら、作業を開始。まず、USB メモリ認識されない! /dev/sd* 何もない。

https://wiki.onion.io/Tutorials/Using-USB-Storage-as-Rootfs

そのまま置いて、翌日みたら、もうOnion Omegaに繋がらない。サポートに連絡すると、なんかreflash the firmware必要って。困った!

reflash the firmwareできたら、またレポートする!

GNU screenの使用方法

VPSに接続する際、何かTerminalソフトが必要。

普段Puttyに慣れて、画面に沢山Puttyの窓が並べるになる。タブ型仮想端末は便利そうで、一時SuperPutty導入なども試みたが、やはりPuttyに戻り。

たまたまubuntuのコミュニティーに活躍する方に会い、screenを進められた。便利そうなので、ちょっと試してみたいと、とりあえずメモを!

screenとは、一つの端末の中で以下のように複数の仮想端末(ウィンドウと呼ばれる)を操作や表示などが出来るツールとなります。

情報源: GNU screenの使用方法 – Opensourcetechブログ(ゼウス・ラーニングパワー裏BLOG)

a Respberry Pi MQTT sample

MQTTのPublisher(リモコン)からのメッセージは、MQTTのbrokerを経由して、自宅Raspberry Pi にMQTTのSubscriber(受信機)受信し、液晶表示盤にテキスト表示、LEDバックライトのON/OFFするできた!

MQTTのbrokerはsango(時雨堂という会社が無償提供) MQTT サーバーを利用。

MQTTのPublisher(リモコン)は、MQTTLens利用。

MQTTのSubscriber(受信機)サンプルコード!

var fs = require('fs');
var mqtt = require("mqtt"),
    config = require("./config.json"),
    client = mqtt.createClient(config.port, config.host, config.options);
var exec = require('child_process').exec,
    child;

client.subscribe(config.topic + "/#");

client.on("message", function(topic, message) {
                console.log(topic, message.toString());

                switch (topic){
                case 'chen420@github/led':
                command = (message!='0'?1:0);

                fs.writeFileSync('/sys/class/gpio/export', 9);
                fs.writeFileSync('/sys/class/gpio/gpio9/direction', 'out');
                fs.writeFileSync('/sys/class/gpio/gpio9/value', command);
                fs.writeFileSync('/sys/class/gpio/unexport', 9);
                break;

                case 'chen420@github/lcd':
                child = exec('/usr/local/bin/lcdprint ' + message,
                        function (error, stdout, stderr) {
                        // console.log('stdout: ' + stdout);
                        // console.log('stderr: ' + stderr);
                        if (error !== null) {
                        console.log('exec error: ' + error);
                        }
                        });
                break;
                }
}
);

参考文献の設定ファイルを利用した。LEDバックライトは、gpio 9番に設定、テキスト表示は、PCD8544-utils のlcdprint コマンドを利用した。

Subscriber の実行:

$ node mqtt-led.js

MQTTブローカーのそれぞれTopicに メッセージが下記の動作が発生

  • chen420@github/led | 0 または1 | バックライトのON/OFF
  • chen420@github/lcd | ”表示メッセージ” | 表示

Subscriberの永続化(サービスとして動く)が次の課題に。

参考文献 : 肩に乗せてもらった巨人達

Raspberry PiでMQTT通して連携

この数週間Raspberry PiにによりHome Automationなどを再考して、Node.js、WebIOPiなど、サーバとして可能性を調べているが、なぜかMQTTに出会って、実装までして、全く違う方向へ進行した。

先週たまたま Ruby – Raspberry Pi で室内の温度を可視化するよー – Qiita 記事を見て、「Sango を介して(MQTT で)結果を Graphite に飛ばす」とはなにか、調べてみた。

MQTTは、M2MやIoT向けの軽量プロトコル。いろいろとメリットあるが、Raspberry PiでMQTT通して連携するメリット考えると

  1. ルータに穴を開ける必要がない
  2. サーバ公開する必要がない
  3. セッション維持する必要がない
  4. 重いHTTPサーバもつ必要がない

実は2年前も自宅に、Raspberry Pi wireless 温度計の制作 をしたが、サーバ公開してないので、外から見れない。もちらん公開する方法もあるが、自宅サーバ際クラウドへ移転などするので、Raspberry PiだけのためにDDNSメンテナンスする気がならない。MQTTならブローカーに繋がれば、いろいろ連携プレーが考えられる。

早速自宅温度データをSango にPubして、他所からSubで見れるようになった。

それからMQTTを通して、自宅Raspberry Piの液晶表示版にテキスト表示、LEDバックライトのON/OFFもできた!

これから、MQTTのメッセージをMongoDBに保存、Google spreadsheetsに保存、グラフ表示、plot.lyのグラフ表示など、やってみたいと思う。

そうそう、AppInventorから、MQTTを通して、Raspberry Piの状態表示、GPIOのコントロールもしてみたい。