2021年4月10日土曜日

AlmaLinux 8.3にJoplinをインストールする

JoplinでノートやTODOリストの管理をする事ができます。

〇Joplinの画面

インストール方法

以下のコマンドを実行します。
sudo mkdir -p /opt/joplin

cd /opt/joplin

sudo wget https://github.com/laurent22/joplin/releases/download/v1.7.11/Joplin-1.7.11.AppImage

sudo chmod +x Joplin-1.7.11.AppImage

sudo wget https://joplinapp.org/images/Icon512.png

cat << EOF | sudo tee /usr/share/applications/joplin.desktop
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=/opt/joplin/Joplin-1.7.11.AppImage
Icon=/opt/joplin/Icon512.png
Name=Joplin
Categories=Office;
EOF

関連情報

・Joplinに関する他の記事は、こちらを参照してください。

Raspberry Pi Zeroと照度センサーモジュールで照度を測る

Raspberry Pi Zeroと照度センサーモジュールで照度を測るには、以下の手順を実行します。
照度モジュールは、秋月電子さんの以下の照度センサーモジュールを使用しました。i2cでRaspberry Piと通信します。

TSL25721使用 照度センサーモジュール
https://akizukidenshi.com/catalog/g/gK-15536/

1. ピンのハンダ付けと、Raspberry Pi Zeroへの接続
・ピンをハンダ付けした照度センサーモジュール

・Raspberry Pi Zeroとジャンパー線で接続した照度センサーモジュール

Raspberry Pi Zeroと照度センサーモジュールは以下の様に接続します(モジュールの裏面にピン略称が印刷されています)
Raspberry Pi 3.3Vピン(ピン1) -> TSL25721のVIN
Raspberry Pi GPIO 2/SDAピン(ピン3) -> TSL25721のSDA
Raspberry Pi GPIO 3/SCLピン(ピン5) -> TSL25721のSCL
Raspberry Pi Groundピン(ピン9) -> TSL25721のGND

2. i2cの有効化
raspi-configコマンドなどを使用してi2cを有効化します。

3. デバイスの認識の確認
以下のコマンドを実行してアドレス0x39のデバイスが認識されていることを確認します。
i2cdetect -y -1

4. pipenvの導入
pipenvをインストールしていない場合は、以下のコマンドを実行します。
sudo apt-get update

sudo apt-get -y install python3-pip python3-distutils python3-dev

sudo pip3 install --upgrade pip

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

5. smbus用の仮想環境作成
pipenvを使用する場合は以下のコマンドで、smbus用の仮想環境を作成します。
mkdir -p ~/smbus

cd ~/smbus

pipenv --python 3

pipenv install smbus

pipenv shell

6. プログラムの作成と実行
以下のプログラムをファイルに保存して、実行します。

test_tsl25721.py
import smbus
import time

i2c = smbus.SMBus(1)
addr_tsl25721=0x39

FIELD_COMMAND = 0x80 # Write
FIELD_TYPE = 0x20 #  Auto-increment protocol transaction

REG_CONTROL = 0x0F # Control Register
VAL_CONTROL_RESET = 0x00 # Reset Value for Control Register

REG_CONFIG = 0x0D # Config Register
VAL_CONFIG_RESET = 0x00 # Reset Value for Config Register

REG_ATIME = 0x01 # ATIME(ALS time) Register
VAL_ATIME_C64 = 0xC0 # INTEG_CYCLE=64, Time=175ms

REG_ENABLE = 0x00 # Enable Register
VAL_ENABLE_PON = 0x01 # Power ON
VAL_ENABLE_AEN = 0x02 # ALS Enable
VAL_ENABLE = VAL_ENABLE_PON | VAL_ENABLE_AEN

REG_C0DATA = 0x14 # CH0 ADC low data register

# Initialize
# Reset Control Register
i2c.write_byte_data(addr_tsl25721, FIELD_COMMAND | FIELD_TYPE | REG_CONTROL, VAL_CONTROL_RESET)

# Reset Config Register
i2c.write_byte_data(addr_tsl25721, FIELD_COMMAND | FIELD_TYPE | REG_CONFIG, VAL_CONFIG_RESET)

# Set ALS time
i2c.write_byte_data(addr_tsl25721, FIELD_COMMAND | FIELD_TYPE | REG_ATIME, VAL_ATIME_C64)

# Power on and enable ALS
i2c.write_byte_data(addr_tsl25721, FIELD_COMMAND | FIELD_TYPE | REG_ENABLE, VAL_ENABLE)

def read_lux():
  atime = 0xC0 # 192
  gain = 1.0

  dat = i2c.read_i2c_block_data(addr_tsl25721, FIELD_COMMAND | FIELD_TYPE | REG_C0DATA, 4)
  adc0 = (dat[1] << 8) | dat[0]
  adc1 = (dat[3] << 8) | dat[2]

  cpl = (2.73 * (256 - atime) * gain)/(60.0)
  lux1 = ((adc0 * 1.00) - (adc1 * 1.87)) / cpl
  lux2 = ((adc0 * 0.63) - (adc1 * 1.00)) / cpl
  lux = 0
  if ((lux1 <= 0) and (lux2 <= 0)) :
    lux = 0
  if (lux1 > lux2) :
    lux = lux1
  elif (lux1 < lux2) :
    lux = lux2

  return lux

while True:
  lux= read_lux()
  print("lux:{:.1f}".format(lux))
  time.sleep(1)

・実行コマンド
以下のコマンドでプログラムを実行し、照度が画面に表示されることを確認します。止める時はCtrl+Cをクリックします。
python3 test_tsl25721.py

2021年4月9日金曜日

AlmaLinux8.3にTagSpacesをインストールする

TagSpacesを使用して、タグを活用した文書管理を行うことができます。

〇TagSpacesの画面

インストール方法

以下のコマンドを実行します。
sudo mkdir -p /opt/tagspaces

cd /opt/tagspaces

sudo wget https://www.tagspaces.org/downloads/tagspaces-linux64.AppImage

sudo chmod +x tagspaces-linux64.AppImage

cat << EOF | sudo tee /usr/share/applications/tagspaces.desktop
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=/opt/tagspaces/tagspaces-linux64.AppImage
Name=TagSpaces
EOF

Raspberry Pi Zero上のEclipse Mosquittoとpaho MQTTで、送信メッセージをキャラクタ液晶ディスプレイに表示する

Raspberry Pi Zero上のEclipse Mosquittoとpaho MQTTで、送信メッセージをキャラクタ液晶ディスプレイに表示するには、以下の手順を実行します。

開発手順

1. pipenvの導入
pipenvをインストールしていない場合は、以下のコマンドを実行します。
sudo apt-get update

sudo apt-get -y install python3-pip python3-distutils python3-dev

sudo pip3 install --upgrade pip

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

2. paho-mqttモジュールとsmbusがインストールされた仮想環境作成
pipenvを使用する場合は以下のコマンドで、paho.mqttとsmbus用の仮想環境を作成します。
mkdir -p ~/smbus_mqtt

cd ~/smbus_mqtt

pipenv --python 3

pipenv install paho-mqtt smbus

pipenv shell

3. paho MQTTでメッセージをキャラクタ液晶ディスプレイモジュールに表示するプログラムを作成する
以下のプログラムで受け取ったメッセージをキャラクタ液晶ディスプレイモジュールに表示します。

mosquitto_sub_display.py
import paho.mqtt.client as mqtt
import smbus
import time

topic = "mosquitto/test"
host = "localhost"
port = 1883
secs_keep_alive=60

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe(topic)

def on_message(client, userdata, msg):
    print("received: {}".format(msg.topic))
    print(str(msg.payload))
    lines = (msg.payload).decode('utf-8').split("\n")
    print("line0: {}".format(lines[0]))
    print("line1: {}".format(lines[1]))
    for ch in lines[0].encode("shift_jis"):
      i2c.write_byte_data(addr_lcd, 0x40, ch)
      time.sleep(0.01)

    i2c.write_byte_data(addr_lcd, 0x00, 0xc0)
    for ch in lines[1].encode("shift_jis"):
      i2c.write_byte_data(addr_lcd, 0x40, ch)
      time.sleep(0.01)

i2c = smbus.SMBus(1)
addr_lcd=0x3e

# Initialize
# Function Set
i2c.write_byte_data(addr_lcd, 0x00, 0x38)
time.sleep(0.01)

# Function Set
i2c.write_byte_data(addr_lcd, 0x00, 0x39)
time.sleep(0.01)

# Internal OSC frequency
i2c.write_byte_data(addr_lcd, 0x00, 0x14)
time.sleep(0.01)

# Contrast set
i2c.write_byte_data(addr_lcd, 0x00, 0x70)
time.sleep(0.01)

# Power/ICON/Constrast control
i2c.write_byte_data(addr_lcd, 0x00, 0x56)
time.sleep(0.01)

# Follower control
i2c.write_byte_data(addr_lcd, 0x00, 0x6c)
time.sleep(0.01)

# Function set
i2c.write_byte_data(addr_lcd, 0x00, 0x38)
time.sleep(0.01)

# Display ON/OFF control
i2c.write_byte_data(addr_lcd, 0x00, 0x0c)
time.sleep(0.01)

# Clear Display
i2c.write_byte_data(addr_lcd, 0x00, 0x01)
time.sleep(0.1)

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect(host, port, secs_keep_alive)

client.loop_forever()

・実行方法
以下のコマンドで受信プログラムを実行します。止める場合はCtrl+Cで止めてください。
python3 mosquitto_sub_display.py

5. 表示文字列の送信
以下のプログラムでメッセージを送信します。

mosquitto_pub_display.py
import paho.mqtt.publish as publish

topic = "mosquitto/test"
host = "localhost"
port = 1883
secs_keep_alive=60

publish.single(topic, "MQTT\nテスト", hostname=host, port=port, keepalive=secs_keep_alive)

・実行方法
以下のコマンドで送信プログラムを実行します。
python3 mosquitto_pub_display.py

関連情報

・秋月電子のRaspberry Piキャラクタ液晶ディスプレイモジュール
https://akizukidenshi.com/catalog/g/gK-11354/

2021年4月8日木曜日

AlmaLinux8.3にProjectLibreをインストールする

ProjectLibreを使用してMicrosoft Projectのようにプロジェクト管理を行う事ができます。

〇ProjectLibreの画面

インストール方法

以下のコマンドを実行します。
sudo dnf install -y java-11-openjdk

sudo mkdir -p /opt/projectlibre

cd /opt/projectlibre

sudo wget https://sourceforge.net/projects/projectlibre/files/ProjectLibre/1.9.3/projectlibre-1.9.3.jar

cat << EOF | sudo tee /usr/share/applications/projectlibre.desktop
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Environment=QT_IM_MODULE=fcitx
Exec=/bin/java -jar /opt/projectlibre/projectlibre-1.9.3.jar
Name=ProjectLibre
Categories=Development;
EOF

関連情報

・ProjectLibreに関する他の記事は、こちらを参照してください。

Debian 10(Buster)/Ubuntu 20.04/Raspberry PiにEclipse MosquittoとPython用Eclipse pahoをインストールする

Eclipse mosquittoはMQTT ブローカー(=MQTTのサーバ)、Eclipse pathoはMQTTプロトコルのライブラリです。
Publish/Subscribeモデルでメッセージを送受信できます。

開発手順

1. mosquittoをインストール
以下のコマンドでmosquittoをインストールします。
sudo apt-get -y install mosquitto mosquitto-clients

2. pipenvの導入
pipenvをインストールしていない場合は、以下のコマンドを実行します。
sudo apt-get update

sudo apt-get -y install python3-pip python3-distutils python3-dev

sudo pip3 install --upgrade pip

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

3. paho-mqttモジュールがインストールされた仮想環境作成
pipenvを使用する場合は以下のコマンドで、paho-mqtt用の仮想環境を作成します。
mkdir -p ~/paho_mqtt

cd ~/paho_mqtt

pipenv --python 3

pipenv install paho-mqtt

pipenv shell

4. Subscribeサンプルプログラム
以下のプログラムで、mosquitto/testというトピックを受信してメッセージを表示します。

mosquitto_sub_test.py
import paho.mqtt.client as mqtt

topic = "mosquitto/test"
host = "localhost"
port = 1883
secs_keep_alive=60

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe(topic)

def on_message(client, userdata, msg):
    print("received: {}:{}".format(msg.topic, str(msg.payload)))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect(host, port, secs_keep_alive)

client.loop_forever()

・実行方法
以下のコマンドで受信プログラムを実行します。止める場合はCtrl+Cで止めてください。
python3 mosquitto_sub_test.py

5. Publishサンプルプログラム
以下のプログラムで、mosquitto/testというトピックにメッセージを送信します。

mosquitto_pub_test.py
import paho.mqtt.publish as publish

topic = "mosquitto/test"
host = "localhost"
port = 1883
secs_keep_alive=60

publish.single(topic, "message test", hostname=host, port=port, keepalive=secs_keep_alive)

・実行方法
以下のコマンドで送信プログラムを実行します。
python3 mosquitto_pub_test.py

Mosquittoのコマンドによる送受信

mosquittoのコマンドで、メッセージを送受信する事も出来ます。

・送信用コマンド
mosquitto_pub -t mosquitto/test -h localhost -m "test message by command."

・受信用コマンド
mosquitto_sub -t mosquitto/test -h localhost

2021年4月7日水曜日

AlmaLinux8.3にQGISをインストールする

QGISで地理情報の編集を行うことができます。

〇QGISの画面

インストール方法

シェルから以下のコマンドを実行します。
sudo dnf -y install flatpak

sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

sudo flatpak -y install --from  https://flathub.org/repo/appstream/org.qgis.qgis.flatpakref
※ダウンロード時にエラーが発生した場合は、再実行します

関連情報

・QGISに関する他の記事は、こちらを参照してください。