2025年1月3日金曜日

デジタルサイネージ

2025/01/03 
Raspbery Pi を使ってデジタルサイネージを作成

Raspbery Pi Imager に、Anthias があり簡単に作成できるようだが、ローカルネットワーク環境ではうまく動かなかった、調査はそこそこにして作ってみることにした

欲しい機能、デジタル時計表示、画像表示、画像には時間表示ができる、曜日毎に表示制御、夜は表示しない

画像表示は、python と pygame を組み合わせて実現する
画像の入れ替えは、Apache と php を組み合わせて実現する

Raspbery Pi は、Imager を使って 32bit版を適用する
#セットアップ環境は他のWindows PCからSSH接続
#ユーザーID は、pi を使用

最新にアップデート
$ sudo apt-get -y update
$ sudo apt-get -y upgrade

pygame のセットアップ
$ sudo apt install -y python3-pygame

Apache2 のセットアップ
$ sudo apt-get install -y apache2

$ sudo systemctl restart apache2 (念の為)
 Edgeなどで開くと起動確認できる

php のセットアップ
$ sudo apt install -y php

PHPの送信ファイルのサイズ拡大
$ sudo vi /etc/php/7.4/apache2/php.ini
7.4はインストールしたバージョン

下記の項目を変更する、変更するサイズは適当です
upload_max_filesize = 50M
post_max_size = 100M
memory_limit = 256M

$ sudo systemctl restart apache2 (再起動して変更を適用)

samba のセットアップ 
#ファイル送信のためにセットアップ、USBなどで転送するなら不要かも
$ sudo apt install -y samba

$ sudo vi /etc/samba/smb.conf
下記を最終に追加
------------------------------------------------
[pi]
   comment = Welcome to pi Server
   path = /home/pi/
   browseable = yes
   wriable = yes
   guest ok = yes
   force create mode = 0666
   force directory mode = 0777
   read only = no
   create mask =0777
   directory mask = 0777
[www]
   comment = www server
   path = /var/www/html
   browseable = yes
   wriable = yes
   guest ok = yes
   force create mode = 0666
   force directory mode = 0777
   read only = no
   create mask =0777
   directory mask = 0777
------------------------------------------------
sambaパスワードを設定
$ sudo smbpasswd -a pi

$ sudo service smbd restart (再起動して変更を適用)

$ sudo mkdir /var/www/html/DigtalSignage (表示する画像データ保管フォルダ)

wwwのフォルダにアクセスできるようにする(権限は最大化、適宜合わせる)
$ sudo chmod 777 /var/www
$ sudo chmod 777 /var/www/html
$ sudo chmod 777 /var/www/html/DigtalSignage

自動更新の停止(自動更新が働くと止まってしまう)
$ sudo apt-mark hold raspberrypi-kernel
$ sudo apt-mark hold firmware*

wwwページ作成
------------------------------------------------
/var/www/html/index.php
/var/www/html/update.php
/var/www/html/upload.php
/var/www/html/apply.png
/var/www/html/shutdown.png
/var/www/html/reboot.png
/var/www/html/up.png
/var/www/html/down.png
/var/www/html/delete.png
------------------------------------------------

初期のトップページを削除
$ sudo rm /var/www/html/index.html

画像表示 pythonスクリプト作成
$ mkdir /home/pi/DigtalSignage
------------------------------------------------
/home/pi/DigtalSignage/DigtalSignage.py
------------------------------------------------

自動起動の設定
$ mkdir /home/pi/.config/autostart
ファイル作成(/home/pi/.config/autostart/.desktop)
------------------------------------------------
[Desktop Entry]
Type=Application
Name=My Python App
Exec=/home/pi/startup.sh
------------------------------------------------

スタートアップスクリプト作成(/home/pi/startup.sh)
------------------------------------------------
#!/bin/bash
sleep 30    # 少し待たないと起動できない
cd /var/www/html/DigtalSignage/
/usr/bin/python3 /home/pi/DigtalSignage/DigtalSignage.py
------------------------------------------------
起動できるように変更
$ sudo chmod 777 startup.sh

再起動で起動

画像の追加は、Edge等でラズパイに接続する

止めるには、SSHでログオンして、プロセスを KILL する
$ ps ax で、プロセス番号確認
$ kill -kill [プロセス番号]

ご自由にお使いください
一切の責任は負いません

Raspberry Pi 1:処理的に無理みたい
Raspberry Pi 2:画像ファイルサイズが大きくなければ使える
Raspberry Pi 4:そこそこ使える

2024年6月8日土曜日

RX621を使ってみる (3)

2024/06/08

秋月電子で販売されている RX621マイコンボード を使ってみる(その3)
ラジコンのサーボをPWMを使って動かす

周期を20msecで、High:0.8msec、Low:19.2msec と High:2.25msec、Low:17.75msec を切り替えて サーボモータを動かす。
(可変範囲はいろいろあるが今回はこの値にする)

PB0とPB1のポートを使って2つのサーボモータを制御する

#include "iodefine.h"

void MTU2_initialize(void)
{
    /* MTU9 = PWM Mode 1 */
    MSTP(MTU9) = 0;              /* Wake up MTU9 */

    /* タイマプリスケーラ選択ビット */
    /* 内部クロック:PCLK / 16 でカウント */
    MTU9.TCR.BIT.TPSC = 2;

    /* クロックエッジ選択ビット */
    /* 立ち下がりエッジでカウント */
    MTU9.TCR.BIT.CKEG = 1;
                             

    /* カウンタクリア要因選択ビット */
    /* TGRAのコンペアマッチ/インプットキャプチャでTCNTクリア */
    MTU9.TCR.BIT.CCLR = 1;

    /* モード選択ビット */
    /* PWMモード1 */
    MTU9.TMDR.BIT.MD = 2;

    /* バッファ動作Aビット */
    /* TGRAとTGRCレジスタは通常動作 */
    MTU9.TMDR.BIT.BFA = 0;

    /* バッファ動作Bビット */
    /* TGRBとTGRDレジスタは通常動作 */
    MTU9.TMDR.BIT.BFB = 0;

    /* I/OコントロールAビット */
    /* 初期出力はLow出力,コンペアマッチでHigh出力 */
    MTU9.TIORH.BIT.IOA = 2;

    /* I/OコントロールBビット */
    /* 初期出力はLow出力,コンペアマッチでLow出力 */
    MTU9.TIORH.BIT.IOB = 1;

    /* タイマジェネラルレジスタA */
    /* (1/48000000)*16*60000=20msec(50Hz) */
    MTU9.TGRA = 60000;

    /* タイマジェネラルレジスタB */
    /* (1/48000000)*16*4500=1.5msec */
    MTU9.TGRB = 4500;            

    /* I/OコントロールCビット */
    /* 初期出力はLow出力,コンペアマッチでHigh出力 */
    MTU9.TIORL.BIT.IOC = 2;

    /* I/OコントロールDビット */
       /*  初期出力はLow出力,コンペアマッチでLow出力 */
    MTU9.TIORL.BIT.IOD = 1;

    /* タイマジェネラルレジスタC */
       /* (1/48000000)*16*60000=20 msec(50Hz) */
    MTU9.TGRC = 60000;

    /* タイマジェネラルレジスタD */
       /* (1/48000000)*16*4500=1.5 msec */
    MTU9.TGRD = 4500;

    /* タイマカウンタ(TCNT) */
    MTU9.TCNT = 0;

    /* MTU9.TCNTはカウント動作 */
    MTUB.TSTR.BIT.CST3 = 1;
}

void main(void)
{
    long int i;

    /* コアクロック96MHz */
    SYSTEM.SCKCR.BIT.ICK = 0;

    /* 周辺機器クロック PCLK=48MHz */
    SYSTEM.SCKCR.BIT.PCK = 1;

    MTU2_initialize();

    while(1) {
        /* タイマジェネラルレジスタB    */
        /* (1/48000000)*16*2400=0.8msec */
        MTU9.TGRB = 2400;
        for (i = 0 ; i <= 21000000 ; i++) {
            /* タイマジェネラルレジスタD */
            MTU9.TGRD = 2400 + (i / 5000);
        }

        /* タイマジェネラルレジスタB     */
        /* (1/48000000)*16*6600=2.25msec */
        MTU9.TGRB = 6600;
        for (i = 0 ; i <= 21000000 ; i++) {
            /* タイマジェネラルレジスタD */
            MTU9.TGRD = 6600 - (i / 5000);
        }
    }
}






2024年6月5日水曜日

Raspberry Pi Pico で Lチカ (C言語)

Raspberry Pi Pico 開発環境

こちらを参考にインストールする https://www.raspberrypi.com/news/raspberry-pi-pico-windows-installer/

下記からダウンロードする

https://github.com/raspberrypi/pico-setup-windows?tab=readme-ov-file

ダウンロードしたファイル pico-setup-windows-x64-standalone.exe でインストールする

左下にある Build をクリックすると Build できるが、初めは「Pico ARM GCC」を選択する

※初めはすべてコンパイルするみたいで時間がかかる

C:\Users\[ユーザー名]\Documents\Pico-v1.5.1\pico-examples\build\blink に blink.uf2 が出来る

Raspberry Pi Pico をスイッチを押しながらUSBで接続する。RPI-RP2のドライブが現れるので、blink.uf2 をコピペすると、ドライブが無くなってLEDが点滅を始める

プログラミングはしていないが、Lチカ出来た!


マニュアル

https://datasheets.raspberrypi.com/pico/raspberry-pi-pico-c-sdk.pdf

https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf

2024年5月12日日曜日

RX621を使ってみる (2)

 2024/05/12
秋月電子で販売されている RX621マイコンボード を使ってみる(その2)

RX621を使ってみる (1) の LED_Blink.c を変更する

P20 を PWM で明暗を切り替える
P21 を をポート出力で ON/OFF する
周期は2.5ms(400Hz)

#include "iodefine.h"

void MTU1_initialize(void)
{
    /* MTU1 = PWM Mode 1 */
    MSTP(MTU1) = 0;
    MTU1.TCR.BIT.TPSC = 1;
    MTU1.TCR.BIT.CKEG = 1;
    MTU1.TCR.BIT.CCLR = 1;
    MTU1.TMDR.BIT.MD = 2;
    MTU1.TIOR.BIT.IOA = 2;
    MTU1.TIOR.BIT.IOB = 1;
    MTU1.TGRA = 30000;
    MTU1.TGRB = 9000;
    MTU1.TCNT = 0;
    MTUA.TSTR.BIT.CST1 = 1;
}

void main(void)
{
    long int i;

    SYSTEM.SCKCR.BIT.ICK = 0;
    SYSTEM.SCKCR.BIT.PCK = 1;

    MTU1_initialize();

    PORT2.DR.BIT.B1 = 0;
    PORT2.DDR.BIT.B1 = 1;

    while(1) {
        PORT2.DR.BIT.B1 = 1;
        MTU1.TGRB = 9000;
        for (i = 0 ; i < 10000000 ; i++);
        PORT2.DR.BIT.B1 = 0;
        MTU1.TGRB = 25000;
        for (i = 0 ; i < 5000000 ; i++);
    }
}

周期は、(1/48MHz(PCLK) × 4(TPSC) × 30000(TIGA) = 2.5msec となる

2024年5月5日日曜日

RX621を使ってみる (1)

2024/05/05
秋月電子で販売されている RX621マイコンボード を使ってみる
RX621マイコン開発セット(マザーボード・液晶) は、在庫限りになってしまいました

ルネサスの統合開発環境 CS+ を使う
統合開発環境 CS+ | Renesas こちらからダウンロード、ダウンロード時のバージョンは、V8.11.00

CSPlus_CC_Package_V81100-doc-j.zip を解凍し、インストールする
 ※ディスプレイの解像度低いとインストールできない
  追加ディスプレイでHDMIサイズがあればインストールできる
[ツール] - [オプション]
 [全般] - [表示] タブの桁数を 4 に変更
[ファイル] - [新規作成] - [新しいプロジェクトを作成]
マイクロコントローラ : RX を選択
RX621 を展開し、下の方の R5F56218BxFP(100pin) を選択
プロジェクト名に適当な名前を設定(今回は、LED_Blinkを使用)
[作成]

LED_Blink.c を変更する

インクルード文を追加
#include "iodefine.h"

main にコードを追加

    long int i;             /* カウンター変数 */
    PORT2.DR.BYTE = 0x00;   /* PORT2クリア */
    PORT2.DDR.BYTE = 0xff;  /* PORT2の全端子を出力に設定 */
    while(1) {
        PORT2.DR.BYTE = ~PORT2.DR.BYTE;  /* ポート反転 */
        for(i = 0 ; i < 1000000 ; i++);  /* Wait */
    }

[ビルド] - [ビルド・プロジェクト]

出力ウィンドウに下記が表示されれば OK
= 終了しました(成功:1プロジェクト, 失敗:0プロジェクト)

ドキュメント\LED_Blink\DefaultBuild に、LED_Blink.mot が出来ている

motファイルの転送

Renesas Flash Programmer (Programming GUI) | Renesas をダウンロード
Renesas_Flash_Programmer_Package_V31500-doc.zip を解凍してインストール

[ファイル] - [新しいプロジェクトの作成]
 マイクロコントローラ : RX62x
 プロジェクト名 : 適当な名前を入力(今回はRX621を使用)
 ツール : USB Direct

マイコンボードの CN4 のディップスイッチを ON-ON-OFF-OFF に変更しUSB接続
ツール詳細をクリックすると、接続されたマイコンボードが表示される

[接続] をクリック、メインクロックには 12MHz を入力

[ファイルの追加と削除] をクリック、[ファイルを追加] をクリック
LED_Blink.mot を選択する

[スタート] で書き込みが失敗する、USB を抜き差し後に、再度[スタート] で成功する

USB を抜き、CN4 を OFF-ON-OFF-OFF に変更する
USB を接続USBからの電源で起動(ACアダプタでもOK)、マザーボードのLEDが点滅!

2024/06/08更新
Windows 11 では、「hmseusb.sys」のエラーで書き込みができない
[スタート] - [プライバシーとセキュリティ] - [Windows セキュリティ] - [Windows セキュリティを開く]
[デバイス セキュリティ] - [コア分離]
 「メモリ整合性」 : オフ
 「Microsoft の貧弱なドライバーのブロックリスト」 : オフ
 ※これで書き込みできるようになった

ソースをgithub置きました、個人の責任で
https://github.com/tombow-src/RX621

2020年8月3日月曜日

Raspberry Pi Zero + ラズパイマガジン2019年10月号付属基板の環境構築 その2

A/D変換を試す

/AnalogCAP $ ./log.py &
[1] 841  ⬅プロセスNo.

1分毎にA/D変換する

止める (プロセスを停止する)
/AnalogCAP $ kill 841

更新タイミングを1sec毎にするには、log.py の最後を変更する
    # to count second
    i+=1
    if i > 0:
       i = 0


2020年7月28日火曜日

Raspberry Pi Zero + ラズパイマガジン2019年10月号付属基板の環境構築

Raspberry Pi Zero + ラズパイマガジン2019年10月号付属基板の環境構築

Raspberry Pi Zero + 実装済み基板

Raspi用のSDカードを準備する

Raspberry Pi Imager を使って、OSを書き込む

Windows10で、初期設定をする。

一旦、SDカードを外し再度PCに刺す

SSHを使えるようにする
 rootフォルダに、ssh 拡張子なしのサイズ0のファイルを作成する
Wifiを使えるようにする
 rootフォルダに、「wpa_supplicant.conf」のファイルを作成する
--------------------------------------------------------------------------
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="SSID"
    psk="暗号キー"
}
--------------------------------------------------------------------------
SSID」「暗号キー」を使える環境に合わせる

PCからSDを抜いて、Raspi Zeroに挿して起動させる
しばらく待って、コマンドプロンプトで、「ping raspberrypi.local」で、IPアドレスを調べる

TeraTeamで接続する ID「pi」、Pass「raspberry」
(初期パスワードは変更したほうがいい)

OSのアップデート
$ sudo apt-get update
$ sudo apt-get upgrade

液晶ディスプレイに表示する

$ wget http://einstlab.web.fc2.com/RaspberryPi/AnalogCAP.tar

$ tar xvf AnalogCAP.tar

$ cd AnalogCAP/

/AnalogCAP $ ./setup.sh

/AnalogCAP $ sudo reboot

/AnalogCAP $ ./initLCD.py

/AnalogCAP $ ./locateLCD.py 0 0

/AnalogCAP $ ./printLCD.py "123"

/AnalogCAP $ ./locateLCD.py 0 1

/AnalogCAP $ ./printLCD.py "ABC"

LCDに表示できた