<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>天文 | 星空の風景, 日々の風景</title>
	<atom:link href="https://globe3.ddns.net/wp/category/starry-sky/astronomical/feed/" rel="self" type="application/rss+xml" />
	<link>https://globe3.ddns.net/wp</link>
	<description>星空のこと. 日々に想うこと.</description>
	<lastBuildDate>Tue, 09 Jun 2026 03:24:23 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
	<item>
		<title>Himadawa Cover ELパネル 制御</title>
		<link>https://globe3.ddns.net/wp/himadawa-cover-elpanel-control-python/</link>
					<comments>https://globe3.ddns.net/wp/himadawa-cover-elpanel-control-python/#comments</comments>
		
		<dc:creator><![CDATA[minmin]]></dc:creator>
		<pubDate>Wed, 15 Oct 2025 02:03:47 +0000</pubDate>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[天文]]></category>
		<guid isPermaLink="false">https://globe3.ddns.net/wp/?p=2285</guid>

					<description><![CDATA[https://himadawa.doorblog.jp/archives/10160498.htmlあっさりと作られるのは、凄い事です。それを楽しまれているのも素晴らしい。 Himadawaさんが制作されたカバーとEL [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><a rel="noopener" target="_blank" href="https://himadawa.doorblog.jp/archives/10160498.html">https://himadawa.doorblog.jp/archives/10160498.html</a><br>あっさりと作られるのは、凄い事です。それを楽しまれているのも素晴らしい。</p>



<p class="wp-block-paragraph">Himadawaさんが制作されたカバーとELパネルを Python で &#8220;On, Off&#8221; するGUIを試作します。<br>PythonでUSBシリアルリレーを&#8221;On, Off&#8221;します。</p>



<p class="wp-block-paragraph">GNU/Linux では、コマンドとそれを組み合わせたスクリプトで過ごしてきた自分ですが、これは『人に優しくない』ので、GUIを習作します。</p>



<p class="wp-block-paragraph">GNU/Linux を使い、コマンドを組み合わせたスクリプトは何となく作れる者の、これは、Python学習メモです。まとまっていません。<br>貴方には読みにくいと思います。ごめんなさい。</p>



<p class="wp-block-paragraph">Python ソースは一番下側にあります。貴方の必要に応じて改変して使って下さい。</p>



<p class="wp-block-paragraph">「曇りの日が多くて星空が見られないよ〜」→「天体画像処理も一通り終えたな〜」→<br>　「Siril開発版も落ち着いてきたな〜」→「プログラムでもしよっかな」→<br>　　「天体画像処理でも使えるからPythonだ」</p>



<h2 class="wp-block-heading">USBデバイスを調べる</h2>



<p class="wp-block-paragraph"><a rel="noopener" target="_blank" href="https://devicehunt.com">https://devicehunt.com</a><br>こちらでUSBデバイスを調べます。<br><br>今回使う、USB RELAY X-RL1 のベンダーidとプロダクトidを入れると、<br>Microchip Technology, Inc.<br>CDC RS-232 Emulation Demo</p>



<h2 class="wp-block-heading">リレー動作確認</h2>



<p class="wp-block-paragraph">コマンドを送って、USBリレーモジュールの動作確認を行います。<br>物は、USB RELAY X-RL1 及び、USB RELAY X-RL2</p>



<ul class="wp-block-list">
<li>USBモジュールを差し込み、/dev/ttyUSB0 もしくは /dev/ttyACM0 などを確認します。</li>



<li>$ sudo stty -F /dev/ttyACM0　← ボーレートの設定。設定無しでも良い。</li>



<li>$ sudo echo -n &#8220;1&#8221; &gt; /dev/ttyACM0　← グループにユーザー追加せずに、sudoを用いる。</li>



<li>$ sudo echo -n &#8220;0&#8221; &gt; /dev/ttyACM0　← 改行が不要な場合は、-nオプション。</li>
</ul>



<p class="wp-block-paragraph">USB RELAY X-RL2 は基盤プリントに &#8220;A1送信でリレーAがON&#8221; とあるので以下で動作確認します。</p>



<ul class="wp-block-list">
<li>$ sudo echo -n &#8220;A1&#8221; &gt; /dev/ttyACM0</li>



<li>$ sudo echo -n &#8220;A0&#8221; &gt; /dev/ttyACM0</li>



<li>$ sudo echo -n &#8220;B1&#8221; &gt; /dev/ttyACM0</li>



<li>$ sudo echo -n &#8220;B0&#8221; &gt; /dev/ttyACM0</li>
</ul>



<h2 class="wp-block-heading">Python周り (Python 環境のこと)</h2>



<p class="wp-block-paragraph">SirilもPythonスクリプトを多用しています。<br>自分もPythonコードを少しは分かるようになりたいので、Pythonを使います。<br>OSはGUN/Linux, Ubuntu 24 です。</p>



<p class="wp-block-paragraph">GUIを扱う&#8221;Tkinter&#8221;<br>シリアルを扱う&#8221;pyserial&#8221;を用意します。</p>



<p class="wp-block-paragraph"><a rel="noopener" target="_blank" href="https://packaging.python.org/ja/latest/tutorials/installing-packages">https://packaging.python.org/ja/latest/tutorials/installing-packages</a><br>ここを参照し、仮想環境も作ります。</p>



<pre class="wp-block-code"><code>$ python3 -m pip --version #バージョン確認
$ python3 -m venv tutorial_env #試作ディレクトリを作成
$ cd tutorial_env
$ source ./bin/activate #試作ディレクトリを活性化
$ python3 -m pip install tkinter
$ python3 -m pip install pyserial</code></pre>



<p class="wp-block-paragraph">Pythonのシリアル通信モジュールには、2種類あるそうです。<br>・pyserial ← こちらを使います。<br>・serial</p>



<p class="wp-block-paragraph">Visual Studio Code が便利そうなので使います。<br><a rel="noopener" target="_blank" href="https://code.visualstudio.com/download">https://code.visualstudio.com/download</a><br>&#8220;.deb&#8221;ファイルをダウンロードし、$ sudo apt install code_????_amd64.deb</p>



<pre class="wp-block-code"><code>カレントディレクトリで、Visual Studio Code を動かします。
$ code .</code></pre>



<p class="wp-block-paragraph">日本語パッケージを使います。Japanese Language Pack<br>Python言語サポートする拡張機能も使います。<br></p>



<h2 class="wp-block-heading">デバイスファイル名を固定する</h2>



<p class="wp-block-paragraph">頻繁に、PCに接続する機器が変わらないならば、pythonコードにデバイスを指定します。</p>



<p class="wp-block-paragraph">USBデバイスを入れ替えるならば、コネクターに挿すごとにデバイスファイル名が変わるのは、困ります。<br>その場合は、udevコンフィグファイルを指定することで、シンボリックリンクを作ります。</p>



<p class="wp-block-paragraph">USB RELAY X-RL1 は、syslogを見ると、</p>



<pre class="wp-block-code"><code>New USB device found, idVendor=04d8, idProduct=000a, bcdDevice= 1.01
New USB device strings: Mfr=1, Product=2, SerialNumber=3
Product: USB-RELAY1
SerialNumber: X-RL1
mtp-probe: checking bus 2, device 5: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1"</code></pre>



<p class="wp-block-paragraph">USB端子の箇所を変えると、</p>



<pre class="wp-block-code"><code>mtp-probe: checking bus 2, device 6: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2"</code></pre>



<p class="wp-block-paragraph">$ lsusb</p>



<pre class="wp-block-code"><code>Bus 002 Device 008: ID 04d8:000a Microchip Technology, Inc. CDC RS-232 Emulation Demo</code></pre>



<p class="wp-block-paragraph">$ udevadm info -a -n /dev/ttyACM0</p>



<pre class="wp-block-code"><code>looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1':
  KERNELS=="2-1.1"
  SUBSYSTEMS=="usb"
  DRIVERS=="usb"</code></pre>



<p class="wp-block-paragraph">udevのルールを記述して名前を指定します。<br>参考にしたのはこの方<br><a rel="noopener" target="_blank" href="https://qiita.com/porizou1/items/f8e23e32ed8e1be85c65">https://qiita.com/porizou1/items/f8e23e32ed8e1be85c65</a></p>



<p class="wp-block-paragraph">/etc/udev/rules.d ディレクトリに、指定ファイルを置きます。<br><a rel="noopener" target="_blank" href="https://wiki.archlinux.jp/index.php/Udev">https://wiki.archlinux.jp/index.php/Udev</a><br>上記を参照</p>



<p class="wp-block-paragraph">/etc/udev/rules.d/99-usb-switches.rules</p>



<pre class="wp-block-code"><code>ACTION=="add", KERNELS=="2-1.1", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="000a", SYMLINK+="relay_X-RL1", GROUP="dialout"

# Web カメラならばこんな感じかな
# KERNEL=="video*", SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="YYYY", ATTR{index}=="0", SYMLINK+="usb-camera-video0", GROUP="video", MODE="0666"</code></pre>



<ul class="wp-block-list">
<li><code>ATTRS{idVendor}</code>、<code>ATTRS{idProduct}</code>：デバイスに応じて適宜設定する</li>



<li><code>SYMLINK</code>：固定したい名称</li>



<li>GROUP：グループを指定。&#8221;Arduino&#8221;を使用したOnStep赤道儀、&#8221;Althiba&#8221;を使うのに&#8221;dialout&#8221;グループを指定しているので、これを用います。</li>



<li>実行権限を追加するには<code> MODE="0666"</code>を指定する。</li>
</ul>



<p class="wp-block-paragraph">udevに新しいルールを適応させます。</p>



<pre class="wp-block-code"><code>$ sudo udevadm control --reload-rules &amp;&amp; sudo udevadm trigger</code></pre>



<p class="wp-block-paragraph">上記の様に設定すれば、&#8221;/dev/relay_X-RL1&#8243; と指定できます。</p>



<p class="wp-block-paragraph">ここまで行って気づいたのは、プルダウンメニューで、&#8221;/dev/tty何とか&#8221;を選び、指定するのも良いかもしれません。</p>



<h2 class="wp-block-heading">Python スクリプト　自動起動させる</h2>



<p class="wp-block-paragraph">Ubuntu + Python + venv（仮想環境）を、PC起動時にPythonスクリプトを動かします。<br>また、まわり道です。</p>



<p class="wp-block-paragraph"><a rel="noopener" target="_blank" href="https://widedeepspace.net/2024/09/03/1634">https://widedeepspace.net/2024/09/03/1634</a><br>こちらの方を参考にして</p>



<pre class="wp-block-code"><code>Exec=gnome-terminal -- bash -c "'/home/UserName/ProjectName/venv/bin/python' '/home/UserName/ProjectName/test.py';$SHELL"</code></pre>



<p class="wp-block-paragraph">この部分を下記の様にしました。</p>



<pre class="wp-block-code"><code>Exec=bash -c "source /home/USERNAME/HimadawaCoverEL/venv/bin/activate &amp;&amp; python3.13 /home/USERNAME/HimadawaCoverEL/HimadawaCoverEL.py"</code></pre>



<p class="wp-block-paragraph">/home/USERNAME/.config/autostart/gnome-Himadawa-terminal.desktop<br>以下にファイルを作ります。</p>



<pre class="wp-block-code"><code>&#91;Desktop Entry]
Type=Application
Name=My Venv Script
Exec=bash -c "source /home/USERNAME/HimadawaCoverEL/venv/bin/activate &amp;&amp; python3.13 /home/USERNAME/HimadawaCoverEL/HimadawaCoverEL.py"
Terminal=false
</code></pre>



<p class="wp-block-paragraph">PC起動時に、&#8221;HimadawaCoverEL.py&#8221;も画面に表示されます。</p>



<h2 class="wp-block-heading">Python シリアル事始め</h2>



<p class="wp-block-paragraph"><a rel="noopener" target="_blank" href="https://www.python.jp/train/index.html">https://www.python.jp/train/index.html</a><br>&#8220;プログラミング言語 Python情報サイト&#8221; こちらも参考にします。<br>分かったことを確認するために、ここに戻ります。</p>



<p class="wp-block-paragraph"><a rel="noopener" target="_blank" href="https://qiita.com/umi_mori/items/757834e0ef75f38cea19">https://qiita.com/umi_mori/items/757834e0ef75f38cea19</a><br>先ずは、こちらの方から学びます。</p>



<p class="wp-block-paragraph">コマンドを用いて、USBシリアルに&#8221;1&#8243;を送ります。&#8221;1&#8243;を&#8221;0&#8243;に代えると&#8221;0&#8243;を送ります。<br>serial-send_1.py</p>



<pre class="wp-block-code"><code># serial モジュールを読み込み
import serial

# serial ポート指定
PORT ='/dev/ttyACM0'

# serial ボーレート指定
BAUDRATE = 9600

# serial を開ける
# timeout引数は、データの受信待機時間を指定
ser = serial.Serial(PORT, BAUDRATE, timeout=3)

# serial "1" 送る
data = '1'
ser.write(data.encode())

# serial 状態を受信
print(ser)

# serial を閉じる
ser.close()</code></pre>



<p class="wp-block-paragraph">他のソースでは、</p>



<pre class="wp-block-code"><code>import serial

print("===== USBデバイスを指定中 =====\n")

# Set Parameter USBデバイスを指定
deviceName = '/dev/ttyACM0'
baudrateNum = 9600
timeoutNum = 3
print("===== USBデバイス指定終わり =====\n")

# Read Serial
### readSer = serial.Serial('/dev/ttyACM0',9600, timeout=3)
readSer = serial.Serial(deviceName, baudrateNum, timeout=timeoutNum)

c = readSer.read() # 1 byte
### string = readSer.read(10) # 10 byte
### line = readSer.readline() # 1 line (upto '\n')

print("Read Serial:")
print(c)
readSer.close()
print("===== Serial読み込み終わり =====\n")

# Serial 書き込み
serialCommand = "1"
writeSer = serial.Serial(deviceName, baudrateNum, timeout=timeoutNum)
writeSer.write(serialCommand.encode())
writeSer.close()
print("===== Serial書き込み終わり =====\n")

# serial 読み込み
# 文字列に変数を埋め込む f-strings、フォーマット済み文字列リテラル
print(f"シリアル状態:{readSer}")

print("===== プログラム終了 =====\n")</code></pre>



<pre class="wp-block-code"><code>$ python3.13 serial-send_1.py
$ python3.13 serial-send_0.py</code></pre>



<p class="wp-block-paragraph">USB RELAY X-RL1 は、動作確認ができました。</p>



<h2 class="wp-block-heading">Pythonで行いたいこと：仕様  その1 (先ずは簡単に)</h2>



<ul class="wp-block-list">
<li>USBデバイスのパスと通信速度をソースで指定</li>



<li>カバー On, Off スイッチ</li>



<li>ELパネル On, OFF スイッチ</li>



<li>スイッチをそれぞれに2つ</li>



<li>それぞれの状態は、ステータスランプ</li>



<li>カバー[開]、ELパネル[点灯]は、[緑色] → ステータスランプ</li>



<li>カバー[閉]、ELパネル[消灯]は、[橙色] → ステータスランプ</li>
</ul>



<h2 class="wp-block-heading">Pythonで行いたいこと：仕様 その2 (こちらを目指したい)</h2>



<ul class="wp-block-list">
<li>/dev/ を一覧表示</li>



<li>/dev/一覧表示からデバイス、ボーレートを選ぶ</li>



<li>デバイスを接続、若しくは切断</li>



<li>カバー、ELパネル、それぞれにOn、Offスイッチ</li>



<li>カバー[開]、カバー[閉]、ELパネル[点灯]、ELパネル[消灯]、ステータスランプを表示する</li>
</ul>



<h2 class="wp-block-heading">Python GUI 事始め</h2>



<p class="wp-block-paragraph">『習うよりも、慣れろ』これはプログラミングで良く言われることです。<br>本やサイトにあるコードを見たならば、一行でもコードを打ち込む。ですね。</p>



<div class="wp-block-cocoon-blocks-info-box block-box primary-box">
<p class="wp-block-paragraph">tkinter を用いてGUIを表示させます。</p>
</div>



<p class="wp-block-paragraph">#は、コメントになります。<br>&#8220;&#8221;&#8221;<br>これもコメントになります。<br>複数行のコメントになります。<br>&#8220;&#8221;&#8221;</p>



<p class="wp-block-paragraph">&#8220;&#8221;&#8221;で囲むと文字列</p>



<p class="wp-block-paragraph">処理ブロックは、段落（インデント）ごと<br>文の終わりは改行</p>



<pre class="wp-block-code"><code># ライブラリのインポート
import tkinter as tk

# メインウィンドウの作成
# tk.Tk()は、アプリケーションのメインウィンドウを作成します
# すべてのTkinterアプリケーションは、まずこのインスタンスから始まります

root = tk.Tk()

# ウィンドウのタイトル
root.title("僕のサイズは 400 x 300")

# ウィンドウサイズと位置を指定
root.geometry("400x300+100+50")  # サイズ400x300、画面上の位置(100,50)
# root.geometry("400x300")  # サイズ400x300 のみ

# ウィジェットの作成と配置
# ウィジェットとは、GUIを構成する部品のことです
# ボタン、テキストボックス、ラベル、メニューなどです
label = tk.Label(root, text="Hello, Tkinter!")
label.pack()

# 5. イベントループの開始
# ウィンドウを表示させ、操作を待ち続けさせる
root.mainloop() #これが無いと一瞬で消える</code></pre>



<p class="wp-block-paragraph">上記ソースを表示</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="454" height="439" src="https://globe3.ddns.net/wp/wp-content/uploads/2025/10/geometry_400x300.jpg" alt="" class="wp-image-2428" srcset="https://globe3.ddns.net/wp/wp-content/uploads/2025/10/geometry_400x300.jpg 454w, https://globe3.ddns.net/wp/wp-content/uploads/2025/10/geometry_400x300-300x290.jpg 300w, https://globe3.ddns.net/wp/wp-content/uploads/2025/10/geometry_400x300-150x145.jpg 150w" sizes="(max-width: 454px) 100vw, 454px" /></figure>



<p class="wp-block-paragraph">[カバー部分]や、[EL部分]などの様に、部分を一つのモノとして扱うには、オブジェクト指向</p>



<pre class="wp-block-code"><code>from tkinter import ttk</code></pre>



<p class="wp-block-paragraph">from tkinter import ttk とは、<br><code>" tkinter.ttk</code> →Tk のテーマ付きウィジェット, Ttk &#8221; との事です。<br>ボタンやチェックがつく外観を使えるようです。<br><a rel="noopener" target="_blank" href="https://kuroro.blog/python/L9hqzwxZAx0soqSmI8zE/">https://kuroro.blog/python/L9hqzwxZAx0soqSmI8zE/</a></p>



<h2 class="wp-block-heading" id="import%E6%96%87">import文<a rel="noopener" target="_blank" href="https://www.python.jp/train/type_and_func/modules.html#import%E6%96%87"></a></h2>



<p class="wp-block-paragraph"><code>import</code> 文は、利用するモジュールを次のように指定します。</p>



<p class="wp-block-paragraph">次の様に指定します。</p>



<pre class="wp-block-preformatted">import tkinter # tkinterモジュールを使用する</pre>



<p class="wp-block-paragraph">モジュールをインポートしたら、</p>



<pre class="wp-block-preformatted">モジュール名.関数名()</pre>



<p class="wp-block-paragraph">の形式で、そのモジュールの関数を使えるようになります。</p>



<h2 class="wp-block-heading">Pythonの型とオブジェクト</h2>



<p class="wp-block-paragraph">関連するデータと、それに対する操作をまとめて、これを一つのモノとして捉えます。<br>↓<br>変数と、関数をまとめて、これをオブジェクトとして捉えます。</p>



<p class="wp-block-paragraph">オブジェクトの属性やこの値を「プロパティ」と呼ぶ。<br>関数を「メソッド」と呼ぶ。</p>



<p class="wp-block-paragraph">　「クラス」　　→　「インスタンス化」　→　「オブジェクト」<br>望遠鏡の設計図　→　　インスタンス化　　→　　実際の望遠鏡</p>



<p class="wp-block-paragraph">オブジェクトを使って、<br>・シリアルデバイスを選び、ボーレートを指定。接続、切断ボタン<br>・カバー開ボタン、カバー閉ボタン。EL点灯ボタン、EL消灯ボタン<br>これらをオブジェクトとして配置する。</p>



<p class="wp-block-paragraph">Pythonでは、Pythonが操作するいろいろな種類のデータやプログラムなどのことを、まとめて <strong>オブジェクト</strong> と呼びます。</p>



<h2 class="wp-block-heading">Python ボタン事始め</h2>



<div class="wp-block-cocoon-blocks-info-box block-box primary-box">
<p class="wp-block-paragraph">tkinter を用いて、GUIに「ボタン」を表示させます。</p>
</div>



<p class="wp-block-paragraph"><a rel="noopener" target="_blank" href="https://japan-cyber.com/archives/3685">https://japan-cyber.com/archives/3685</a><br>この方から</p>



<pre class="wp-block-code"><code>import tkinter as tk

# メインウィンドウ作成
root = tk.Tk()

# メインウィンドウのタイトル
root.title("HimadawaCoverEL制御")

# メインウィンドウを640x480にする
root.geometry("480x280")

# Cover 開くボタン
def on_button1_click():
    print("Cover開ボタンがクリック")

# Cover 開くボタン処理
button1 = tk.Button(root, text="Cover開 : A1", command=on_button1_click)
button1.pack()

# Cover 閉じるボタン
def on_button2_click():
    print("Cover閉ボタンがクリック")

# Cover 閉じるボタン処理
button2 = tk.Button(root, text="Cover閉 : A0", command=on_button2_click)
button2.pack()

# EL点灯ボタン
def on_button3_click():
    print("EL点灯ボタンがクリック")

# EL点灯ボタン処理
button3 = tk.Button(root, text="EL点灯 : B1", command=on_button3_click)
button3.pack()

# EL消灯ボタン
def on_button4_click():
    print("EL消灯ボタンがクリック")

# EL消灯ボタン処理
button4 = tk.Button(root, text="EL消灯 : B0", command=on_button4_click)
button4.pack()

# rootを表示し無限ループ
root.mainloop()</code></pre>



<p class="wp-block-paragraph">上記ソースを表示</p>



<figure class="wp-block-image size-full"><img decoding="async" width="541" height="471" src="https://globe3.ddns.net/wp/wp-content/uploads/2025/10/HimadawaCoverELControl_A1A0-B1B0.jpg" alt="" class="wp-image-2527" srcset="https://globe3.ddns.net/wp/wp-content/uploads/2025/10/HimadawaCoverELControl_A1A0-B1B0.jpg 541w, https://globe3.ddns.net/wp/wp-content/uploads/2025/10/HimadawaCoverELControl_A1A0-B1B0-300x261.jpg 300w, https://globe3.ddns.net/wp/wp-content/uploads/2025/10/HimadawaCoverELControl_A1A0-B1B0-150x131.jpg 150w" sizes="(max-width: 541px) 100vw, 541px" /></figure>



<h2 class="wp-block-heading">def 文</h2>



<p class="wp-block-paragraph">Python では　関数を定義するのに &#8220;def&#8221; を用います。</p>



<p class="wp-block-paragraph">def 関数名 (引数)<br>        関数の処理内容</p>



<h2 class="wp-block-heading">Python ボタンに処理を含ませる：シリアルにA1,A0を送る</h2>



<pre class="wp-block-code"><code>
import tkinter as tk
import serial

# pySerialライブラリ、シリアルポートの一覧を取得します
# 後ほど、一覧取得に使います。
#import serial.tools.list_ports

# シリアルポートとボーレートの設定
# 接続しているデバイスのCOMポート名
# Windowsでは'COM3'など、macOSやLinuxでは'/dev/ttyACM0'など
PORT = '/dev/ttyACM0' 
BAUDRATE = 9600

# シリアル通信の初期化
# serial.Serial()を使ってシリアルポートを開きます
# ser = serial.Serial(PORT, BAUDRATE)

# 何らかのエラーで開けなかった場合は、エラーメッセージを表示します
# try-except構文を使用して、
# シリアル通信中に発生する可能性のあるエラーを捉え処理します
try:
    ser = serial.Serial(PORT, BAUDRATE)
    print(f"シリアルポート {PORT} を開きました。")
except serial.SerialException as e:
    print(f"エラー: シリアルポート {PORT} を開けませんでした。{e}")
    ser = None

# send_data関数: シリアルポートにデータを送信する汎用的な関数です
# ser.write()を使って、引数で受け取った文字列を
# バイトデータにエンコード（.encode('utf-8')）をして送信します。
def send_data(data):
    """シリアル通信でデータを送信する関数"""
    if ser and ser.is_open:
        try:
            ###ser.write(data.encode('utf-8')) # エンコードして送信
            ser.write(data.encode()) # エンコードしないで送信
            print(f"'{data}' をシリアル送信しました。")
        except serial.SerialException as e:
            print(f"エラー: データ送信中に問題が発生しました。{e}")
    else:
        print("エラー: シリアルポートが開いていません。")

# send_A1とsend_A0関数: 
# それぞれのボタンがクリックされたときに呼び出される関数（イベントハンドラ）。
# 対応する文字列をsend_dataに渡します。
def send_A1():
    """A1を送信するボタンのイベントハンドラ"""
    send_data("A1")

def send_A0():
    """A0を送信するボタンのイベントハンドラ"""
    send_data("A0")

def send_B1():
    """B1を送信するボタンのイベントハンドラ"""
    send_data("B1")

def send_B0():
    """B0を送信するボタンのイベントハンドラ"""
    send_data("B0")


# Tkinterのウィンドウを作成
root = tk.Tk()
root.title("HimadawaCoverEL制御")
#root.geometry("300x150")
root.geometry("480x280")

# tk.Button()でボタンを作成し、
# command引数にボタンがクリックされたときに実行する関数を指定します。
# button.pack()でボタンをウィンドウに配置します。
# x方向の外部間隔はpadx、y方向の外部間隔はpadyで指定します。

# A1送信ボタン
button_a1 = tk.Button(root, text="Cover開：A1", command=send_A1)
button_a1.pack(pady=10)

# A0送信ボタン
button_a0 = tk.Button(root, text="Cover閉：A0", command=send_A0)
button_a0.pack(pady=10)

# B1送信ボタン
button_b1 = tk.Button(root, text="EL点灯：B1", command=send_B1)
button_b1.pack(pady=10)

# B0送信ボタン
button_b0 = tk.Button(root, text="EL消灯：B0", command=send_B0)
button_b0.pack(pady=10)


# ウィンドウが閉じられた時に、シリアルポートも閉じるための処理をします
# ウィンドウクローズ時の処理: 
# on_closing関数は、ウィンドウが閉じられたときに呼ばれます。
# この関数内でser.close()を実行し、シリアルポートを閉じます。
def on_closing():
    """ウィンドウが閉じられたときに実行する関数"""
    if ser and ser.is_open:
        ser.close()
        print("シリアルポートを閉じました。")
    root.destroy()

# ウィンドウマネージャのイベントを処理
# ウィンドウの閉じるボタン(WM_DELETE_WINDOW)が押された時の処理を指定します
root.protocol("WM_DELETE_WINDOW", on_closing)

# イベントループ
root.mainloop()</code></pre>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Tkinterを使ったクラス化手法によるGUI</h2>



<p class="wp-block-paragraph"><a rel="noopener" target="_blank" href="https://qiita.com/michimichix521/items/4d8721aaa59e1c913d9a">https://qiita.com/michimichix521/items/4d8721aaa59e1c913d9a</a><br>クラス化は、<br>同じ手続きを繰り返さないで、つまり、同じボタンを表示するのに何度も手続きを繰り返さない為に、表示するボタンを「自分専用のボタンクラス」として定義すること。</p>



<p class="wp-block-paragraph">でも、今回は操作ボタンは4つ、シリアル選択、接続&amp;切断トグルボタンが１つなので、<br>オブジェクト指向を用いないで記述します。手続き型で記述します。</p>



<h2 class="wp-block-heading">TkinterのFrame, pack, gridをためす</h2>



<p class="wp-block-paragraph">wedget (ウィジェット)<br>ボタン、ラベル(表示)、ラジオボタンなどの　オブジェクトのこと</p>



<h2 class="wp-block-heading">制御構文や条件分岐　if文のこと</h2>



<p class="wp-block-paragraph">制御構文とは、<br>プログラムの流れを分けること</p>



<p class="wp-block-paragraph">プログラムをただ単に上から順に処理していくには、その限界があります。</p>



<p class="wp-block-paragraph">そこで、<br>・条件分岐　→　処理を分岐させる　　→　if  :　→　if と 『コロン』<br>・繰り返し　→　処理を繰り返させる　→　for と while<br></p>



<pre class="wp-block-code"><code>if 条件式 1:
    条件式 1  に行う処理
elif 条件式 2 :
    条件式 2  に行う処理
elif 条件式 3 :
    条件式 3  に行う処理
...
else:
    すべての条件式が 偽 のときに行う処理
</code></pre>



<h2 class="wp-block-heading">テキスト表示用ウィジェット</h2>



<p class="wp-block-paragraph">視覚が改善されたウィジェットを使用したい場合は<br><code>from tkinter import ttk</code></p>



<h2 class="wp-block-heading">イベントループ：「何かしてよ」&#8212; .pyより &#8212;</h2>



<p class="wp-block-paragraph"><code>mainloop()</code>メソッドは、アプリケーションを画面に表示させ続け、GUIでの入力やシステムイベントを待ち続け、イベントがあれば処理します。</p>



<ul class="wp-block-list">
<li>画像の表示：ウィンドウやウィジェット（ボタン、ラベルなど）を画面に表示し続ける</li>



<li>イベント待ち：マウスクリック、キーボード入力、ウィンドウの大きさ変更などを待つ</li>



<li>イベントを検出：発生したイベントを取得する</li>



<li>イベントの処理：ボタンを押した時やキーボード入力などの処理 (コールバック関数)を行う</li>



<li>画面の更新：必要に応じてウィジェットの表示を更新する</li>



<li>ループの継続：アプリケーションが終了するまで、上記を繰り返す</li>
</ul>



<h2 class="wp-block-heading">参考にしたURL　その1</h2>



<p class="wp-block-paragraph"></p>


<a rel="noopener" target="_blank" href="https://qiita.com/yatima9/items/03b8f1ab1b847c512540#:~:text=%E3%81%A4%E3%81%8F%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE%20%20%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E3%83%9D%E3%83%BC%E3%83%88%E3%81%AE%E6%8E%A5%E7%B6%9A%E5%88%87%E6%96%AD%20%20%E3%83%9C%E3%83%BC%E3%83%AC%E3%83%BC%E3%83%88%E3%80%81%E3%83%87%E3%83%AA%E3%83%9F%E3%82%BF%E8%A8%AD%E5%AE%9A%20*%20%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E9%80%81%E5%8F%97%E4%BF%A1" title="tkinterで簡易シリアル通信アプリ - Qiita" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkZxaWl0YS1pbWFnZS1zdG9yZSUyRjAlMkYyODM5MzUyJTJGY2M4M2QzOTM5NzJmZDNkZGU2N2ZmOTlmYzJiYTc1NGFmMzIxZTllZiUyRnhfbGFyZ2UucG5nJTNGMTcwOTUyNzE3Mj9peGxpYj1yYi00LjAuMCZhcj0xJTNBMSZmaXQ9Y3JvcCZtYXNrPWVsbGlwc2UmYmc9RkZGRkZGJmZtPXBuZzMyJnM9ODU5MzFmYTlkYWJjMzRhMzljZjlkZGQ4MjIwYmNlNWQ%26blend-x%3D120%26blend-y%3D467%26blend-w%3D82%26blend-h%3D82%26blend-mode%3Dnormal%26s%3D87a3ac28a6efebec63179b69fde14317?ixlib=rb-4.0.0&#038;w=1200&#038;fm=jpg&#038;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9dGtpbnRlciVFMyU4MSVBNyVFNyVCMCVBMSVFNiU5OCU5MyVFMyU4MiVCNyVFMyU4MyVBQSVFMyU4MiVBMiVFMyU4MyVBQiVFOSU4MCU5QSVFNCVCRiVBMSVFMyU4MiVBMiVFMyU4MyU5NyVFMyU4MyVBQSZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1wYWQ9MCZzPTc1YzcyYmJiMjcyNjFiOWFmYjg3ZWE2MmY2MDlkMDRj&#038;mark-x=120&#038;mark-y=112&#038;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDB5YXRpbWE5JnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LXBhZD0wJnM9ZWRmZDU3ZDBmZjAzYzkyMGM0ZDA4ZDIzYzdiZjM5YjQ&#038;blend-x=242&#038;blend-y=480&#038;blend-w=838&#038;blend-h=46&#038;blend-fit=crop&#038;blend-crop=left%2Cbottom&#038;blend-mode=normal&#038;s=582a078c415eec618510fd3615f4a3d8" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">tkinterで簡易シリアル通信アプリ &#8211; Qiita</div><div class="blogcard-snippet external-blogcard-snippet">つくったもの Aruduinoと通信してる様子（Arduinoは送信データをそっくりそのまま返すだけ） シリアルポートの接続切断 ボーレート、デリミタ設定 文字列の送受信 という機能だけのシンプルなアプリです。 準備 pythonで簡単にG&#8230;</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://qiita.com/yatima9/items/03b8f1ab1b847c512540" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">qiita.com</div></div></div></div></a>

<a rel="noopener" target="_blank" href="https://askubuntu.com/questions/1408207/how-to-program-gui-for-serial-port" title="How to program GUI for serial Port" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://cdn.sstatic.net/Sites/askubuntu/Img/apple-touch-icon.png?v=e16e1315edd6" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">How to program GUI for serial Port</div><div class="blogcard-snippet external-blogcard-snippet">I have a microchip and want to communicate via a GUI with it.I have Ubuntu.First step would be just having buttons that &#8230;</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://askubuntu.com/questions/1408207/how-to-program-gui-for-serial-port" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">askubuntu.com</div></div></div></div></a>

<a rel="noopener" target="_blank" href="https://www.exasub.com/embedded-system/python-programming-language/how-to-make-uart-serial-console-using-pyserial-tkinter-in-python/#:~:text=How%20to%20make%20UART%20Serial%20Console%20using%20Pyserial%2C%20Tkinter%20in%20python%20%E2%80%93%20EXASUB." title="How to make UART Serial Console using Pyserial, Tkinter in python &#8211; EXASUB" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.exasub.com%2Fembedded-system%2Fpython-programming-language%2Fhow-to-make-uart-serial-console-using-pyserial-tkinter-in-python%2F%23%3A%7E%3Atext%3DHow%2520to%2520make%2520UART%2520Serial%2520Console%2520using%2520Pyserial%252C%2520Tkinter%2520in%2520python%2520%25E2%2580%2593%2520EXASUB.?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">How to make UART Serial Console using Pyserial, Tkinter in python &#8211; EXASUB</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.exasub.com/embedded-system/python-programming-language/how-to-make-uart-serial-console-using-pyserial-tkinter-in-python/#:~:text=How%20to%20make%20UART%20Serial%20Console%20using%20Pyserial%2C%20Tkinter%20in%20python%20%E2%80%93%20EXASUB." alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.exasub.com</div></div></div></div></a>


<h2 class="wp-block-heading">参考にしたURL　その2</h2>


<a rel="noopener" target="_blank" href="https://qiita.com/tapitapi/items/1dd9c66c0dff061bcd82" title="Pythonのpyserialとthreadingでリアルタイムなシリアル通信をする。 - Qiita" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Fadvent-calendar-ogp-background-7940cd1c8db80a7ec40711d90f43539e.jpg%3Fixlib%3Drb-4.0.0%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkZxaWl0YS1pbWFnZS1zdG9yZSUyRjAlMkYxMjk5ODAyJTJGODdhZmUxMWZmZjQ0NDRhODU1NWM0Y2JhNWE1OTNlM2E5NmY3MDg1NCUyRnhfbGFyZ2UucG5nJTNGMTY5ODkzNTIwOT9peGxpYj1yYi00LjAuMCZhcj0xJTNBMSZmaXQ9Y3JvcCZtYXNrPWVsbGlwc2UmYmc9RkZGRkZGJmZtPXBuZzMyJnM9YTc0ZTJlYTU3MTNjNGYzNjY4M2ZkZGZhMjdjMTU0OGU%26blend-x%3D120%26blend-y%3D467%26blend-w%3D82%26blend-h%3D82%26blend-mode%3Dnormal%26s%3D083ee77b1e4b4e6cced75dbaac7c506d?ixlib=rb-4.0.0&#038;w=1200&#038;fm=jpg&#038;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9UHl0aG9uJUUzJTgxJUFFcHlzZXJpYWwlRTMlODElQTh0aHJlYWRpbmclRTMlODElQTclRTMlODMlQUElRTMlODIlQTIlRTMlODMlQUIlRTMlODIlQkYlRTMlODIlQTQlRTMlODMlQTAlRTMlODElQUElRTMlODIlQjclRTMlODMlQUElRTMlODIlQTIlRTMlODMlQUIlRTklODAlOUElRTQlQkYlQTElRTMlODIlOTIlRTMlODElOTklRTMlODIlOEIlRTMlODAlODImdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzNBM0MzQyZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZ0eHQtcGFkPTAmcz0xYWMzNTdkOGFmNTdmNGYyNDg1ZjRlNzVhNTlhM2I1Mg&#038;mark-x=120&#038;mark-y=112&#038;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDB0YXBpdGFwaSZ0eHQtY29sb3I9JTIzM0EzQzNDJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1wYWQ9MCZzPTVmNmQwMzdhZGMxNmM0MTIxYjNmNDZiOGQ2MTA1OTU0&#038;blend-x=242&#038;blend-y=480&#038;blend-w=838&#038;blend-h=46&#038;blend-fit=crop&#038;blend-crop=left%2Cbottom&#038;blend-mode=normal&#038;s=094616adc4a2a802ec00b18ded7681a7" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Pythonのpyserialとthreadingでリアルタイムなシリアル通信をする。 &#8211; Qiita</div><div class="blogcard-snippet external-blogcard-snippet">はじめに Raspbeiry Pi Pico等の電子デバイスをシリアル通信(UART)で制御する場合、Windows PCであれば、定番のTera Termを使えばよいが、あえてPythonでシリアル通信をする方法がないか？を調べてみたので&#8230;</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://qiita.com/tapitapi/items/1dd9c66c0dff061bcd82" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">qiita.com</div></div></div></div></a>

<a rel="noopener" target="_blank" href="https://www.geeksforgeeks.org/python/python-gui-tkinter" title="Python Tkinter - GeeksforGeeks" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://media.geeksforgeeks.org/wp-content/uploads/20240425154445/mainloop_output.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Python Tkinter &#8211; GeeksforGeeks</div><div class="blogcard-snippet external-blogcard-snippet">Your All-in-One Learning Portal: GeeksforGeeks is a comprehensive educational platform that empowers learners across dom&#8230;</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.geeksforgeeks.org/python/python-gui-tkinter/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.geeksforgeeks.org</div></div></div></div></a>

<a rel="noopener" target="_blank" href="https://www.geeksforgeeks.org/python/change-the-color-of-a-tkinter-label-programmatically" title="Change The Color Of A Tkinter Label Programmatically - GeeksforGeeks" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://media.geeksforgeeks.org/wp-content/uploads/20240527140021/stringcolorvalue-ezgifcom-video-to-gif-converter.gif" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Change The Color Of A Tkinter Label Programmatically &#8211; GeeksforGeeks</div><div class="blogcard-snippet external-blogcard-snippet">Your All-in-One Learning Portal: GeeksforGeeks is a comprehensive educational platform that empowers learners across dom&#8230;</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.geeksforgeeks.org/python/change-the-color-of-a-tkinter-label-programmatically/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.geeksforgeeks.org</div></div></div></div></a>


<p class="wp-block-paragraph">youtube URL <a rel="noopener" target="_blank" href="https://www.youtube.com/watch?v=nsJtQeAFeXo&amp;t=1s">https://www.youtube.com/watch?v=nsJtQeAFeXo&amp;t=1s</a></p>



<p class="wp-block-paragraph">youtube URL <a rel="noopener" target="_blank" href="https://www.youtube.com/watch?v=9EXt69Vlm_E&amp;t=9s">https://www.youtube.com/watch?v=9EXt69Vlm_E&amp;t=9s</a></p>


<a rel="noopener" target="_blank" href="https://pythonbasics.org/tkinter-button" title="
                Tkinter buttons (GUI Programming) - Python Tutorial
            " class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fpythonbasics.org%2Ftkinter-button?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">
                Tkinter buttons (GUI Programming) &#8211; Python Tutorial
            </div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://pythonbasics.org/tkinter-button" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">pythonbasics.org</div></div></div></div></a>


<p class="wp-block-paragraph">内容を詰めずにコピー&amp;ペーストをした部分があります。<br>動作部分がそれです。一番大切な部分ですね。皆さん有難うございます。</p>



<p class="wp-block-paragraph">def toggle_connection():　<br>&#8220;&#8221;&#8221;接続、及び、切断のトグル&#8221;&#8221;&#8221;</p>



<p class="wp-block-paragraph">def send_command(command, lamp_canvas, lamp_id):<br>&#8220;&#8221;&#8221;シリアルポートにコマンドを送信し、ランプを更新する&#8221;&#8221;&#8221;</p>



<h2 class="wp-block-heading">/devデバイス選択、Class未使用、4ボタン、丸四角ステータスランプ</h2>



<pre class="wp-block-code"><code>
"""
12 2025
(c)Nakato
Himadawa Cover ELPanel USB Serial Relay Operation
貴方の必要に応じて、改変して使って下さい.
"""
# モジュール読み込み tk, messagebox, serial, serial走査
import tkinter as tk
from tkinter import ttk, messagebox
import serial
import serial.tools.list_ports

# シリアルポートオブジェクトとランプを初期化
ser = None
# キャンバスのアイテムIDを保持するためのNone変数
oval_lamp_item = None
rect_lamp_item = None

"""
"= None"
初期化時に変数に値を設定しない場合
関数が明示的に値を返さない場合
"""
def get_serial_ports():
    """利用可能なシリアルポートをリストアップする"""
    ports = serial.tools.list_ports.comports()
    return &#91;port.device for port in ports]

def update_ports():
    """ポートリストを更新してコンボボックスに反映させる"""
    port_menu&#91;'values'] = get_serial_ports()
    if get_serial_ports():
        port_menu.set(get_serial_ports()&#91;0])

def toggle_connection():
    """接続、及び、切断のトグル"""
    global ser
    if connect_button&#91;'text'] == '接続':
        port = port_menu.get()
        baudrate = int(baud_menu.get())
        if not port:
            messagebox.showerror("エラー", "接続ポートを選んで下さい。WindowsはCOM。LinuxはttyACM0など")
            return
        try:
            ser = serial.Serial(port, baudrate, timeout=1)
            connect_button.config(text='切断')
            ### messagebox.showinfo("接続", f"{port}に接続しました。") # 接続メッセージを表示するならば、コメントアウト
        except serial.SerialException as e:
            messagebox.showerror("エラー", f"接続に失敗しました: {e}")
    else:
        if ser and ser.is_open:
            ser.close()
            ser = None # シリアルを初期化
        connect_button.config(text='接続')
        ### messagebox.showinfo("切断", "シリアルポートを切断しました。") # 切断メッセージを表示するならば、コメントアウト

def send_command(command, lamp_canvas, lamp_id):
    """シリアルポートにコマンドを送信し、ランプを更新する"""
    global ser
    if ser and ser.is_open:
        try:
            ser.write(command.encode('utf-8'))
            ###response = ser.readline().decode('utf-8').strip() # 文字コード指定
            response = ser.readline().decode().strip() # 文字コード指定無し
            print(f"送信: {command}, 受信: {response}")
            
            # 受信した応答に基づいてランプの色を変更
            if response == "A1":                         # USBシリアルからの戻り値"A1"
                lamp_canvas.itemconfig(lamp_id, fill="#516AF7") # 開、時
            elif response == "A0":                       # USBシリアルからの戻り値"A0"
                lamp_canvas.itemconfig(lamp_id, fill="#584714") # 閉、時
            elif response == "B1":                       # USBシリアルからの戻り値"B1"
                lamp_canvas.itemconfig(lamp_id, fill="#CCFF00") # 点灯時
            elif response == "B0":                       # USBシリアルからの戻り値"B0"
                lamp_canvas.itemconfig(lamp_id, fill="#817E75") # 消灯時
            else:
                lamp_canvas.itemconfig(lamp_id, fill="gray") # 戻り値不明な場合は灰色
        except serial.SerialException as e:
            messagebox.showerror("通信エラー", f"データの送受信に失敗しました: {e}")
    else:
        messagebox.showwarning("接続していません", "シリアルポートを選んで下さい。")

def on_closing():
    """ウィンドウ終了時にシリアルポートを閉じる"""
    global ser
    if ser and ser.is_open:
        ser.close()
    root.destroy()

# メインウィンドウの設定
root = tk.Tk()
root.title("HimadawaCover_ELパネル制御")
root.protocol("WM_DELETE_WINDOW", on_closing) # ウィンドウ閉じるボタンでシリアルを開放する

# 接続設定エリア
connection_frame = ttk.LabelFrame(root, text="接続設定", padding="10")
connection_frame.pack(padx=10, pady=10, fill="x")

# ポートを指定
port_label = ttk.Label(connection_frame, text="接続ポート:")
port_label.grid(row=0, column=0, padx=5, pady=5, sticky="w")
port_menu = ttk.Combobox(connection_frame, state="readonly")
port_menu.grid(row=0, column=1, padx=5, pady=5, sticky="ew")

# ポートを再走査
reload_button = ttk.Button(connection_frame, text="再読込", command=update_ports)
reload_button.grid(row=0, column=2, padx=5, pady=5)

# 接続速度を指定
baud_label = ttk.Label(connection_frame, text="接続速度:")
baud_label.grid(row=1, column=0, padx=5, pady=5, sticky="w")
###baud_menu = ttk.Combobox(connection_frame, values=&#91;"9600", "19200", "38400", "57600", "115200"], state="readonly")
baud_menu = ttk.Combobox(connection_frame, values=&#91;"9600", "19200", "38400"], state="readonly")
baud_menu.set("9600") #初めは9600
baud_menu.grid(row=1, column=1, padx=5, pady=5, sticky="ew")

# 接続ボタン表示
connect_button = ttk.Button(connection_frame, text="接続", command=toggle_connection)
connect_button.grid(row=2, column=0, columnspan=3, padx=5, pady=10, sticky="ew")
update_ports()

# スイッチエリアを設定
switch_frame = ttk.LabelFrame(root, text="鏡筒カバー ELパネル 操作", padding="10")
switch_frame.pack(padx=10, pady=10, fill="x")

# カバー開閉の操作
cover_frame = ttk.Frame(switch_frame)
cover_frame.pack(pady=5, fill="x")

# カバー開閉の丸いステータスランプ
###cover_lamp_canvas = tk.Canvas(cover_frame, width=20, height=20, bg="white", relief="sunken", bd=1)
cover_lamp_canvas = tk.Canvas(cover_frame, width=25, height=25, bg="lightgray", bd=1) # キャンバスを背景色、枠無し
cover_lamp_canvas.pack(side="right", padx=10)
oval_lamp_item = cover_lamp_canvas.create_oval(2, 2, 25, 25, fill="gray", outline="black")

# カバー開閉ボタン
a1_button = ttk.Button(cover_frame, text="カバー開(A1)", command=lambda: send_command("A1", cover_lamp_canvas, oval_lamp_item))
a0_button = ttk.Button(cover_frame, text="カバー閉(A0)", command=lambda: send_command("A0", cover_lamp_canvas, oval_lamp_item))
a1_button.pack(side="left", padx=5)
a0_button.pack(side="left", padx=5)

# ELパネル点灯/消灯の操作
el_panel_frame = ttk.Frame(switch_frame)
el_panel_frame.pack(pady=5, fill="x")

# ELパネルの四角いランプ
el_panel_lamp_canvas = tk.Canvas(el_panel_frame, width=25, height=25, bg="gray", relief="sunken", bd=1)
el_panel_lamp_canvas.pack(side="right", padx=10)
rect_lamp_item = el_panel_lamp_canvas.create_rectangle(2, 2, 25, 25, fill="gray", outline="black")

# ELパネル、点灯消灯ボタン
b1_button = ttk.Button(el_panel_frame, text="ELパネル点灯(B1)", command=lambda: send_command("B1", el_panel_lamp_canvas, rect_lamp_item))
b0_button = ttk.Button(el_panel_frame, text="ELパネル消灯(B0)", command=lambda: send_command("B0", el_panel_lamp_canvas, rect_lamp_item))
b1_button.pack(side="left", padx=5)
b0_button.pack(side="left", padx=5)

# イベントループ
root.mainloop()</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="300" height="313" src="https://globe3.ddns.net/wp/wp-content/uploads/2025/10/HimadawaCoverELControl_nonclass300.jpg" alt="" class="wp-image-2576" srcset="https://globe3.ddns.net/wp/wp-content/uploads/2025/10/HimadawaCoverELControl_nonclass300.jpg 300w, https://globe3.ddns.net/wp/wp-content/uploads/2025/10/HimadawaCoverELControl_nonclass300-150x157.jpg 150w" sizes="(max-width: 300px) 100vw, 300px" /></figure>



<p class="wp-block-paragraph">Ubuntu 24 では動作しました。次は、Windows11で動作確認です。<br></p>
]]></content:encoded>
					
					<wfw:commentRss>https://globe3.ddns.net/wp/himadawa-cover-elpanel-control-python/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Ubuntu PC 天文セットアップ</title>
		<link>https://globe3.ddns.net/wp/astronomy-ubuntu-pc-setup/</link>
					<comments>https://globe3.ddns.net/wp/astronomy-ubuntu-pc-setup/#respond</comments>
		
		<dc:creator><![CDATA[minmin]]></dc:creator>
		<pubDate>Fri, 05 Sep 2025 05:11:58 +0000</pubDate>
				<category><![CDATA[INDI-Library]]></category>
		<category><![CDATA[Siril]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[天文]]></category>
		<guid isPermaLink="false">https://globe3.ddns.net/wp/?p=1874</guid>

					<description><![CDATA[ノートPCを天文趣味PCにします。インストールをメモします。 OSは、星の数ほどあるディストリビューションの一つ、GNU/Linux, Ubuntu機器制御、撮影には INDI Library + PHD2画像処理には  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ノートPCを天文趣味PCにします。インストールをメモします。<br><br>OSは、星の数ほどあるディストリビューションの一つ、GNU/Linux, Ubuntu<br>機器制御、撮影には INDI Library + PHD2<br>画像処理には Siril &amp; Python</p>



<h2 class="wp-block-heading">Ubuntu インストールメディアを用意</h2>



<p class="wp-block-paragraph">Ubuntu ミラーサイト<br><a rel="noopener" target="_blank" href="https://launchpad.net/ubuntu/+cdmirrors">https://launchpad.net/ubuntu/+cdmirrors</a></p>



<p class="wp-block-paragraph">Ubuntu リリースサイト<br><a rel="noopener" target="_blank" href="https://releases.ubuntu.com/">https://releases.ubuntu.com/</a></p>



<p class="wp-block-paragraph">ブータブルUSBの作成<br>Ubuntu : BalenaEtcher <a rel="noopener" target="_blank" href="https://github.com/balena-io/etcher/releases/">https://github.com/balena-io/etcher/releases/</a><br>Windows : <a rel="noopener" target="_blank" href="https://rufus.ie/ja/">https://rufus.ie/ja/</a></p>



<h2 class="wp-block-heading">インストール後の設定</h2>


<a rel="noopener" target="_blank" href="https://www.server-world.info/query?os=Ubuntu_24.04" title="Ubuntu 24.04 &#12452;&#12531;&#12473;&#12488;&#12540;&#12523;&#12392;&#35373;&#23450; : Server World" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.server-world.info%2Fquery%3Fos%3DUbuntu_24.04?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Ubuntu 24.04 &#12452;&#12531;&#12473;&#12488;&#12540;&#12523;&#12392;&#35373;&#23450; : Server World</div><div class="blogcard-snippet external-blogcard-snippet">Ubuntu 24.04 における各種アプリケーションのインストール方法や設定方法についてまとめています。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.server-world.info/query?os=Ubuntu_24.04" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.server-world.info</div></div></div></div></a>


<p class="wp-block-paragraph">こちらを参照しています。有り難うございます。</p>



<ul class="wp-block-list">
<li>ssh server を追加します。</li>
</ul>



<pre class="wp-block-code"><code>$ sudo apt install openssh-server</code></pre>



<ul class="wp-block-list">
<li>ホームディレクトリを英語に変更します。</li>
</ul>



<pre class="wp-block-code"><code>LANG=C xdg-user-dirs-gtk-update
若しくは
LANG=C LC_ALL=C xdg-user-dirs-gtk-update</code></pre>



<ul class="wp-block-list">
<li>Caps Lock と Ctrl を入れ替えます。GUIでの操作では、Tweaksを使います。</li>
</ul>



<pre class="wp-block-code"><code>$ sudo apt install gnome-tweaks
"キーボード" → "追加のレイアウトオプション" → "Ctrl posision" → "CtrlとCaps Lock を入れ替える"</code></pre>



<ul class="wp-block-list">
<li>バックアップから&#8221;.ファイル&#8221;をダウンロード。<br>Sirilは初期状態に戻したいので、Siril関連は外します。<br>変更や改変したスクリプトは、別に読み込ませます。</li>
</ul>



<ul class="wp-block-list">
<li>リモートデスクトップのパスワード設定。リモートデスクトップパスワードを固定にします。
<ul class="wp-block-list">
<li>リモートデスクトップを有効にし、パスワードを入れ、設定画面を閉じます。</li>



<li>&#8220;Seahorse&#8221;にある、&#8221;パスワード&#8221;→&#8221;ログイン&#8221;→&#8221;GNOME Remote Desktop RDP credentials&#8221;項目があることを確認し、これを削除します。</li>



<li>&#8220;Seahorse&#8221;にある&#8221;+&#8221;アイコンで、新規に&#8221;パスワードキーリングを追加&#8221;を行います。<br>keyring-RDP</li>



<li>&#8220;enterキー&#8221;で空パスワードを入れます。→ 暗号化していないパスワードを保存</li>



<li>&#8220;Seahorse&#8221;に先ほど追加したパスワード項目があります。<br>これを右クリックで&#8221;デフォルト&#8221;指定し、設定画面を閉じます。</li>



<li>リモートデスクトップ設定を開き、使いたいパスワードを入力し、設定画面を閉じます。</li>



<li>&#8220;Seahorse&#8221;にある、&#8221;パスワード&#8221;→&#8221;ログイン&#8221;→ 先ほど追加した項目に&#8221;GNOME Remote Desktop RDP credentials&#8221;項目があることを確認します。</li>



<li>&#8220;Seahorse&#8221;にある、&#8221;パスワード&#8221;→&#8221;ログイン&#8221;を右クリックし、デフォルトに指定します。</li>
</ul>
</li>
</ul>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p class="wp-block-paragraph">先ほど作った、&#8221;keyring-RDP&#8221;ではなく、&#8221;ログイン&#8221;をデフォルトにします。</p>
</div>



<ul class="wp-block-list">
<li>ノートPCを閉じてもサスペンドさせない</li>
</ul>



<p class="wp-block-paragraph">/etc/systemd/logind.conf を編集します。</p>



<pre class="wp-block-code"><code>/etc/systemd/logind.conf
#HandleLidSwitch=suspend                                                                                                                                                                                                                      
HandleLidSwitch=ignore</code></pre>



<p class="wp-block-paragraph">logind (systemd-logind)は、ユーザーログインを管理します。<br>設定を反映させるには、Ubuntuを再起動します。<br>若しくは、logindを再起動させます。</p>



<pre class="wp-block-preformatted">$ sudo systemctl restart systemd-logind</pre>



<h2 class="wp-block-heading">天体画像処理 Siril, Python</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><a rel="noopener" target="_blank" href="https://www.ubuntu.com/">Ubuntu</a> には最初からPythonがインストールされており、そのまま利用可能です。<br>しかし、このPython は、 OS がさまざまな機能を提供するために使用しています。ユーザが勝手にパッケージを導入したりすると、 OS の安定性を損なうことも考えられますので、別途、あたらしいPythonをインストールするのが一般的です。<br><a rel="noopener" target="_blank" href="https://www.python.jp/install/ubuntu/index.html">https://www.python.jp/install/ubuntu/index.html</a></p>
</blockquote>



<p class="wp-block-paragraph">先ずは、Python環境を整えます。<br>Python 3.13.7 を /usr/local/ へ入れます。<br>Sirilをソースから構築し、Python3.13の仮想環境を作り、Siril Pythonスクリプトを動かします。</p>


<a rel="noopener" target="_blank" href="https://www.python.jp/install/ubuntu/index.html" title="Ubuntu環境のPython - python.jp" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://www.python.jp/static/pythonjp/images/logo_red_120.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Ubuntu環境のPython &#8211; python.jp</div><div class="blogcard-snippet external-blogcard-snippet">Ubuntu には最初からPythonがインストールされており、そのまま利用可能です。 しかし、このPython は、 OS がさまざまな機能を提供するために使用しています。ユーザが勝手にパッケージを導入したりすると、 OS の安定性を損な&#8230;</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.python.jp/install/ubuntu/index.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.python.jp</div></div></div></div></a>

<a target="_self" href="https://globe3.ddns.net/wp/python-on-ubuntu-siril-1-4-0-beta2/" title="Siril 1.4.x で Python を使うために" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://globe3.ddns.net/wp/wp-content/uploads/2025/05/DSA_star-Reduction-py-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://globe3.ddns.net/wp/wp-content/uploads/2025/05/DSA_star-Reduction-py-160x90.jpg 160w, https://globe3.ddns.net/wp/wp-content/uploads/2025/05/DSA_star-Reduction-py-120x68.jpg 120w, https://globe3.ddns.net/wp/wp-content/uploads/2025/05/DSA_star-Reduction-py-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Siril 1.4.x で Python を使うために</div><div class="blogcard-snippet internal-blogcard-snippet">Ubuntu24にインストールした、Siril 1.4.0-beta2で Python を使います。Python仮想環境を指定して、活性化させSirilを起動すると、Siril Pythonモジュールがインストールされ、Pythonスクリプトが使えます。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://globe3.ddns.net/wp" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">globe3.ddns.net</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.05.11</div></div></div></div></a>

<a rel="noopener" target="_blank" href="https://peps.python.org/pep-0668" title="PEP 668 – Marking Python base environments as “externally managed” | peps.python.org" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://peps.python.org/_static/og-image.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">PEP 668 – Marking Python base environments as “externally managed” | peps.python.org</div><div class="blogcard-snippet external-blogcard-snippet">A long-standing practical problem for Python users has been conflicts between OS package managers and Python-specific pa&#8230;</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://peps.python.org/pep-0668/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">peps.python.org</div></div></div></div></a>


<p class="wp-block-paragraph">参照URL<br><a rel="noopener" target="_blank" href="https://qiita.com/keith_campbell/items/e7dc4afc44527b802f6e">https://qiita.com/keith_campbell/items/e7dc4afc44527b802f6e</a><br><a rel="noopener" target="_blank" href="https://qiita.com/AzukiImo/items/5c6dd7e870c9965e41f3">https://qiita.com/AzukiImo/items/5c6dd7e870c9965e41f3</a><br><a rel="noopener" target="_blank" href="https://zenn.dev/eng_ryosan/articles/a635346a3123d3">https://zenn.dev/eng_ryosan/articles/a635346a3123d3</a><br></p>



<p class="wp-block-paragraph">Siril Appimage を動かすには、Ubuntu 24では、&#8221;libfuse2t64&#8243; が必要です。</p>



<p class="wp-block-paragraph">ソースからSiril を構築して、β版も使えます。</p>


<a target="_self" href="https://globe3.ddns.net/wp/try-siril-development-edition-1-4-0/" title="Siril 開発版を試してみよう" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://globe3.ddns.net/wp/wp-content/uploads/2025/04/Siril-1.4.0-beta1-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://globe3.ddns.net/wp/wp-content/uploads/2025/04/Siril-1.4.0-beta1-160x90.jpg 160w, https://globe3.ddns.net/wp/wp-content/uploads/2025/04/Siril-1.4.0-beta1-300x169.jpg 300w, https://globe3.ddns.net/wp/wp-content/uploads/2025/04/Siril-1.4.0-beta1-120x68.jpg 120w, https://globe3.ddns.net/wp/wp-content/uploads/2025/04/Siril-1.4.0-beta1-320x180.jpg 320w, https://globe3.ddns.net/wp/wp-content/uploads/2025/04/Siril-1.4.0-beta1.jpg 702w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Siril 開発版を試してみよう</div><div class="blogcard-snippet internal-blogcard-snippet">Siril開発版が使えます。SPCC、GHS、モザイクに有用なプレートソルビングの歪み補正が使えます。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://globe3.ddns.net/wp" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">globe3.ddns.net</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.04.18</div></div></div></div></a>


<p class="wp-block-paragraph">Sirilを起動すると、Python仮想環境が作られます。</p>



<pre class="wp-block-code"><code>Last available version: 1.4.0-beta3
log: Preparing python virtual environment: /home/USRNAME/.local/share/siril/venv.
log: Checking the python module is up-to-date...
log: Installing / updating python module in the background. This may take a few seconds...
log: Repository cloned successfully!
Processing /home/USERNAME/.local/share/siril/.python_module
log: Repository cloned successfully!</code></pre>



<p class="wp-block-paragraph">Siril Python スクリプトを導入すると、<br>/home/USERNAME/.local/share/siril-scripts/preprocessing/<br>などに置かれます。</p>



<h2 class="wp-block-heading">Cosmic Clarity Suite Siril Pythonスクリプトを English 環境で動かす。</h2>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p class="wp-block-paragraph">Cosmic Clarity Suite Siril Pythonスクリプトは、Ubuntu24では システムの文字セットがJapaneseだと動きませんでした。</p>
</div>


<a target="_self" href="https://globe3.ddns.net/wp/astronomical-image-processing-flow-siril-1-4-cosmic-clarity-suite-6-3-ngc-925-ngc7814-2024/" title="Siril と Cosmic Clarity Suite, 天体画像処理の流れ" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://globe3.ddns.net/wp/wp-content/uploads/2025/06/siril1.4.3-setiastro-cosmic-clarity-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://globe3.ddns.net/wp/wp-content/uploads/2025/06/siril1.4.3-setiastro-cosmic-clarity-160x90.jpg 160w, https://globe3.ddns.net/wp/wp-content/uploads/2025/06/siril1.4.3-setiastro-cosmic-clarity-120x68.jpg 120w, https://globe3.ddns.net/wp/wp-content/uploads/2025/06/siril1.4.3-setiastro-cosmic-clarity-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Siril と Cosmic Clarity Suite, 天体画像処理の流れ</div><div class="blogcard-snippet internal-blogcard-snippet">Siril-1.4.0, StarNet, Cosmic Clarity SuiteVersion 6.3 を用いた天体画像処理の流れ。NGC 925、NGC7814を撮影、画像処理しました。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://globe3.ddns.net/wp" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">globe3.ddns.net</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.06.03</div></div></div></div></a>


<p class="wp-block-paragraph">Franklin Marekさんに問い合わせすると、Linux では nividia のみ使えるそうです。<br>IntelやAMD製GPUユニットが使えるように、リクエストしてみようかな。</p>



<h2 class="wp-block-heading">Teensyduino シリアル通信 : Althiba 3 接続</h2>



<p class="wp-block-paragraph">AlThiba (マチナカリモート天文台製のコントローラー)は、&#8221;TeenAstro Mount&#8221;で動かします。<br>Teen Astro Mount INDI Driver&#8221;は、&#8221;indi-bin&#8221;に含まれています。</p>



<p class="wp-block-paragraph">Althiba3 をUSB接続し、logを見ると、cdc acm ドライバで動かすようです。<br>さらに、ModemManager がデバイスを制御しようとしている。</p>



<pre class="wp-block-code"><code>
kernel: usb 1-1: new high-speed USB device number 10 using xhci_hcd
kernel: usb 1-1: config 1 interface 1 altsetting 0 bulk endpoint 0x3 has invalid maxpacket 64
kernel: usb 1-1: config 1 interface 1 altsetting 0 bulk endpoint 0x84 has invalid maxpacket 64
kernel: usb 1-1: New USB device found, idVendor=16c0, idProduct=0483, bcdDevice= 2.79
kernel: usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
kernel: usb 1-1: Product: USB Serial
kernel: usb 1-1: Manufacturer: Teensyduino
kernel: usb 1-1: SerialNumber: 7939030
kernel: cdc_acm 1-1:1.0: ttyACM0: USB ACM device
mtp-probe: checking bus 1, device 10: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-1"
mtp-probe: bus: 1, device: 10 was not an MTP device
snapd&#91;984]: hotplug.go:206: hotplug device add event ignored, enable experimental.hotplug
mtp-probe: checking bus 1, device 10: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-1"
mtp-probe: bus: 1, device: 10 was not an MTP device
ModemManager&#91;1143]: &lt;msg&gt; &#91;base-manager] couldn't check support for device '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-1': not supported by any plugin</code></pre>



<pre class="wp-block-code"><code>ModemManagerを止める？
systemctl stop ModemManager
それよりもModemManagerを削除しよう。モデムは使わない。。。
$ sudo apt remove modemmanager</code></pre>



<p class="wp-block-paragraph">/dev以下を見ると、</p>



<pre class="wp-block-code"><code>$ ls -l /dev/tty
crw-rw----   1 root   dialout 166,   0  9月 13 20:51 ttyACM0</code></pre>



<p class="wp-block-paragraph">dialoutグループで制御が出来るので、ユーザーアカウントをdialoutグループに登録します。</p>



<pre class="wp-block-code"><code>$ sudo adduser ${USER} dialout
もしくは、
S sudo usermod -a -G dialout ${USER}</code></pre>



<p class="wp-block-paragraph">KStarsを動かし、&#8221;/dev/ttyUSB0が無いよ&#8221; とエラーが表示されたならば、<br>USB接続を確認した、/dev/ttyACM0 にシンボリックシンクを作ります。<br>Ubuntu 24.04では必要ありませんでした。</p>



<pre class="wp-block-code"><code>$ sudo ln -s /dev/ttyACM0 /dev/ttyUSB0</code></pre>



<h2 class="wp-block-heading">天文機器制御 INDI library</h2>


<a rel="noopener" target="_blank" href="https://indilib.org" title="Home" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Findilib.org?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Home</div><div class="blogcard-snippet external-blogcard-snippet">INDI Library provides a framework for control and automation of astronomical instruments.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://indilib.org/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">indilib.org</div></div></div></div></a>

<a rel="noopener" target="_blank" href="https://indilib.org/download/ubuntu/category/3-ubuntu.html" title="Ubuntu" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Findilib.org%2Fdownload%2Fubuntu%2Fcategory%2F3-ubuntu.html?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Ubuntu</div><div class="blogcard-snippet external-blogcard-snippet">INDI Library provides a framework for control and automation of astronomical instruments.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://indilib.org/download/ubuntu/category/3-ubuntu.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">indilib.org</div></div></div></div></a>


<p class="wp-block-paragraph">INDI library を使って、Althiba3, ZWO Camera, ZWO EAF を制御し、銀河などを撮像します。</p>



<pre class="wp-block-code"><code>INDI Library 安定版を入れます。
sudo apt-add-repository ppa:mutlaqja/ppa
sudo apt update
sudo apt install libindi1 indi-bin kstars-bleeding gsc
ZWOカメラを使うので、
sudo apt install indi-asi</code></pre>



<p class="wp-block-paragraph">libindi1, indi-bin は基本ドライバー、Ekos と GSCを入れます。<br>GSCは、&#8221;Hubble Space Telescope, Guide Catalog&#8221;</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">恒星のカタログです。恒星の位置とその等級が含まれています。<br>ハッブル宇宙望遠鏡の運用するために、16等級よりも明るい恒星が、約1900万の恒星が登録されています。<br><a rel="noopener" target="_blank" href="https://heasarc.gsfc.nasa.gov/w3browse/all/gsc.html">https://heasarc.gsfc.nasa.gov/w3browse/all/gsc.html</a></p>
</blockquote>



<p class="wp-block-paragraph">このカタログとINDI libraryシミュレーションを用いて、星空が無くても動作確認ができます。</p>



<p class="wp-block-paragraph">別のパッケージを上書きしようとするパッケージに関するエラーが発生した場合は、</p>



<pre class="wp-block-code"><code>sudo apt-get -o Dpkg::Options::="--force-overwrite" -f install</code></pre>



<h2 class="wp-block-heading">Kstars</h2>



<p class="wp-block-paragraph">Kstarsを動かします。<br>Ekos へ機器のプロファイルと、その構成をトレインとして登録します。</p>



<p class="wp-block-paragraph">File Settings<br>撮影画像ディレクトリ、及び名前形式を決めます。</p>


<a rel="noopener" target="_blank" href="https://kstars-docs.kde.org/ja/user_manual/ekos-capture.html#file-settings" title="Capture" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fkstars-docs.kde.org%2Fja%2Fuser_manual%2Fekos-capture.html%23file-settings?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Capture</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://kstars-docs.kde.org/ja/user_manual/ekos-capture.html#file-settings" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">kstars-docs.kde.org</div></div></div></div></a>


<p class="wp-block-paragraph">%f (ファイル名): 拡張子を除いた .esq ファイルの名前<br>%D (日付/時刻): ファイルが保存された時刻と日付<br>%T (タイプ): フレームのタイプ (例: &#8220;Light&#8221;、&#8221;Dark &#8220;など)<br>%e (露出): 露光時間（秒）<br>%F (フィルター): 使用するフィルター名<br>%t (ターゲット): ターゲット名<br>%s (シーケンス): イメージ シーケンスの識別子。* は使用される桁数 (1 ～ 9) です。 このタグは必須であり、形式の最後の要素である必要があります。<br>サフィックス: ファイル名にシーケンス番号を追加するために使用される桁数</p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box">
<p class="wp-block-paragraph">例えば次の様に指定します。<br>Format: /%T/%t/%t_%T_%F_%e_%D<br>撮影画像名は、指定されたディレクトリに、次のディレクトリ名、ファイル名になります。<br>/Light/M1/M1_Light_HEUIB-II_180_secs_2025-09-15T23-51-16_001.fits</p>
</div>



<h2 class="wp-block-heading">Ekos Auto Focus 設定</h2>



<p class="wp-block-paragraph">EAFの働きが今ひとつなので、ドキュメントを見てみよう。</p>


<a rel="noopener" target="_blank" href="https://docs.kde.org/trunk5/en/kstars/kstars/ekos-focus.html" title="Focus" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.kde.org%2Ftrunk5%2Fen%2Fkstars%2Fkstars%2Fekos-focus.html?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Focus</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://docs.kde.org/trunk5/en/kstars/kstars/ekos-focus.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.kde.org</div></div></div></div></a>


<p class="wp-block-paragraph">動作原理</p>



<p class="wp-block-paragraph"><strong>Linear 1 Pass</strong>:<br>EkosがVカーブを確立し、データに曲線を当てはめて焦点解を求めます。その後、計算された最小値へ移動します<br>　アルゴリズムはフォーカサーのバックラッシュを補正します。<br>　アルゴリズムは高速で、1回のパスで最適焦点位置を特定します。</p>



<p class="wp-block-paragraph">フォーカサーが再現性のある動作（位置Xへの移動指令時に常に同一位置に移動する）を示す場合、このアルゴリズムが最適です。</p>



<p class="wp-block-paragraph"><strong>Linear</strong>:<br>線形アルゴリズムでは、Ekosは開始点から外側へ移動し、最適焦点を経由して規則的なデータポイントを採取しながら内側へ移動し、さらに内側へ進みV字曲線を描画します。その後、データポイントに二次曲線をフィットさせ、最適焦点を算出します。<br>次に再び最適焦点点を越えて外側へ移動し、ステップサイズを半分にして再度内側へ移動し、第二パスを実行します。第1パスで描かれた曲線に沿い、最小HFR値を検出します。HFR測定値のランダム性を考慮し、許容誤差を用いて最適焦点の決定を支援します。</p>



<p class="wp-block-paragraph">　フォーカサーのバックラッシュを補正します。<br>　アルゴリズムは低速で、最適焦点の特定に2パスを要します。<br>　アルゴリズムは1回目で曲線フィッティングを用いて最適焦点位置を特定し、<br>　2回目では許容誤差を用いて、このHFR値に可能な限り接近して停止を試みます。</p>



<p class="wp-block-paragraph">フォーカサーの動作が不安定な場合（例：フォーカス位置への移動させた時に、実際の位置に変動がある場合）、このアルゴリズムは変動に対する許容値を内蔵しているため最適です。</p>



<ul class="wp-block-list">
<li>Donut Buster (食べられるドーナツを防ぐではなく、環状の星像を防ぎます)
<ul class="wp-block-list">
<li>Time Dilation x:　オートフォーカス実行時にデータポイントごとに露出時間を変える。<br>焦点が合ってないので、HFRは大きくなり、ピーク強度は低い。<br>数値を増やして、背景に埋もれることを防げる。</li>



<li>Outlier Rejection: V曲線の数値から外れた場合を除く。数値を高くしないのが良い？</li>
</ul>
</li>



<li>Scan for Start Position
<ul class="wp-block-list">
<li><br></li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">EAFの働きが今ひとつなので、ソースを見てみよう。</p>



<p class="wp-block-paragraph"><a rel="noopener" target="_blank" href="https://github.com/KDE/kstars">https://github.com/KDE/kstars</a><br><a rel="noopener" target="_blank" href="https://github.com/KDE/kstars/tree/master/kstars/ekos/focus">https://github.com/KDE/kstars/tree/master/kstars/ekos/focus</a></p>



<p class="wp-block-paragraph">kstars/ekos/focus</p>



<p class="wp-block-paragraph">Focus Process</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">PHD2: Ubuntu 24.04 + PHD2 v2.6.13</h2>


<a rel="noopener" target="_blank" href="https://openphdguiding.org" title="
		    - PHD2 Guiding	" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fopenphdguiding.org?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">
		    &#8211; PHD2 Guiding	</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://openphdguiding.org" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">openphdguiding.org</div></div></div></div></a>


<p class="wp-block-paragraph">Download -&gt; Building PHD2 on Linux<br>こちらを参考にソースから構築します。</p>


<a rel="noopener" target="_blank" href="https://github.com/OpenPHDGuiding/phd2/wiki/BuildingPHD2OnLinux" title="BuildingPHD2OnLinux" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://opengraph.githubassets.com/0cdaa3726328d67e8e6e85ab8d60d5a447995c985414706fd584d8461df6fb08/OpenPHDGuiding/phd2" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">BuildingPHD2OnLinux</div><div class="blogcard-snippet external-blogcard-snippet">PHD2 Guiding. Contribute to OpenPHDGuiding/phd2 development by creating an account on GitHub.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/OpenPHDGuiding/phd2/wiki/BuildingPHD2OnLinux" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>


<p class="wp-block-paragraph">依存関係のパッケージをインストール</p>



<p class="wp-block-paragraph">INDI Libraryも必要になります。</p>



<pre class="wp-block-code"><code>sudo apt install build-essential git cmake pkg-config libwxgtk3.2-dev \
   wx-common wx3.2-i18n libindi-dev libnova-dev gettext zlib1g-dev libx11-dev \
   libcurl4-gnutls-dev libopencv-dev libeigen3-dev libgtest-dev</code></pre>



<p class="wp-block-paragraph">PHD2 v2.6.13 のソースを入手し make していきます。</p>



<pre class="wp-block-code"><code>git clone https://github.com/OpenPHDGuiding/phd2.git
cd phd2
mkdir -p tmp
cd tmp
cmake ..
make
sudo make install</code></pre>



<p class="wp-block-paragraph">PHD2 v2.6.13 では、<br>「ファイルが無いよ」とエラーが出たので、適宜、必要なディレクトリにコピーしました。</p>



<pre class="wp-block-code"><code>does not exist
Visualization.htm
Trouble_shooting.htm
Glossary.html
Tutorials.htm</code></pre>



<p class="wp-block-paragraph">cmake, make, sudo make install 構築しインストールしたプログラム等を削除するには、<br>インストールしたファイルリストがビルドディレクトリに &#8220;install_manifest.txt&#8221; に書き出されます。</p>



<pre class="wp-block-code"><code>$ xargs sudo rm -rf &lt; install_manifest.txt</code></pre>



<p class="wp-block-paragraph">PHD2 v2.6.12 の場合も同じように構築、インストールし、ログを保存しました。<br>古いソースは、手元に残すべきと思いました。</p>



<p class="wp-block-paragraph">もしも、下記のエラーが表示されたならば、cfitsioライブラリがインストールされていません。</p>



<pre class="wp-block-code"><code>CMake Error in contributions/MPI_IS_gaussian_process/CMakeLists.txt:
  Found relative path while evaluating include directories of
  "GuidePerformanceEval":

    "CFITSIO_INCLUDE_DIR-NOTFOUND"</code></pre>



<p class="wp-block-paragraph">次のコマンドで、libcfitsioライブラリを入れます。</p>



<pre class="wp-block-code"><code>$ sudo apt-get install libcfitsio-dev</code></pre>



<h2 class="wp-block-heading">余談</h2>



<p class="wp-block-paragraph">何度もインストールを行うのでメモを残します。システムを壊して、再インストール時にも役立ちます。もちろん&#8221;.ファイル&#8221;を含めたバックアップは必要です。</p>



<p class="wp-block-paragraph">天体撮影に使うノートPCは、いい加減なジャンクPCを使ってます。元がジャンクなので壊れそう。そろそろ買い換えと思い、量販店へ行って実機を見回すと、スリムなノートPCが並んでいる。<br>裏側のネジ数本外し、メモリやSSDを簡単に交換出来なさそう。交換に困る前に、現行物を入手しようか。。。いや、、もぅ困っています。<br></p>



<h2 class="wp-block-heading">ホームディレクトリを残して、再インストール</h2>



<p class="wp-block-paragraph">「推奨するプロプライエタリなソフトウェア」では、&#8221;グラフィックス&#8221;、&#8221;wi-Fi&#8221;、&#8221;メディアフォーマット&#8221;を選択しない。<br>選択すると以前のファイルシステムをフォーマットせずにインストール選択へ進めないようです。</p>



<p class="wp-block-paragraph">ブートローダーをインストールするデバイスを、先ずは選択する。<br>自動で /boot/efi が設定されるようです。ところが、現状でこちらのPC環境では、インストールが完了しません。</p>



<h2 class="wp-block-heading">Intel CPU内蔵 GPUドライバ</h2>



<p class="wp-block-paragraph">UbuntuでもGPUを使って、天文画像処理を行いたい。</p>


<a rel="noopener" target="_blank" href="https://dgpu-docs.intel.com/driver/client/overview.html" title="Installing Client GPUs &mdash; Intel&#174; software for general purpose GPU capabilities  documentation" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdgpu-docs.intel.com%2Fdriver%2Fclient%2Foverview.html?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Installing Client GPUs &mdash; Intel&#174; software for general purpose GPU capabilities  documentation</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://dgpu-docs.intel.com/driver/client/overview.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">dgpu-docs.intel.com</div></div></div></div></a>


<p class="wp-block-paragraph">ローカルパッケージインデックスを更新し、ソフトウェアリポジトリを管理するためのパッケージをインストールします。</p>



<pre class="wp-block-code"><code>sudo apt-get update
sudo apt-get install -y software-properties-common</code></pre>



<p class="wp-block-paragraph">intel-graphics PPAを追加</p>



<pre class="wp-block-code"><code>sudo add-apt-repository -y ppa:kobuk-team/intel-graphics</code></pre>



<p class="wp-block-paragraph">コンピューティング関連のパッケージをインストールします。</p>



<pre class="wp-block-code"><code>sudo apt-get install -y libze-intel-gpu1 libze1 intel-metrics-discovery intel-opencl-icd clinfo intel-gsc</code></pre>



<p class="wp-block-paragraph">メディア関連のパッケージをインストールしてください。</p>



<pre class="wp-block-code"><code>sudo apt-get install -y intel-media-va-driver-non-free libmfx-gen1 libvpl2 libvpl-tools libva-glx2 va-driver-all vainfo</code></pre>



<p class="wp-block-paragraph">PyTorchを使用する場合は、追加でlibze-devとintel-oclocをインストールしてください</p>



<pre class="wp-block-code"><code>sudo apt-get install -y libze-dev intel-ocloc</code></pre>



<p class="wp-block-paragraph">ハードウェアレイトレーシングのサポートを有効にしたい場合は、追加で libze-intel-gpu-raytracing をインストール</p>



<pre class="wp-block-code"><code>sudo apt-get install -y libze-intel-gpu-raytracing</code></pre>



<p class="wp-block-paragraph">カーネルと計算ドライバーがインストールされ正常に動作していることを確認するには、clinfo を実行してください</p>



<pre class="wp-block-code"><code>clinfo | grep "Device Name"</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Intelグラフィックス製品のデバイス名が表示されているはずです。表示されない場合は、/dev/dri/renderD* へのアクセス権限があることを確認してください。通常、これにはユーザーが render グループに属している必要があります：</p>
</blockquote>



<pre class="wp-block-code"><code>$ ls -l /dev/dri/render*
crw-rw----+ 1 root render 226, 128 10月  1 14:52 /dev/dri/renderD128</code></pre>



<pre class="wp-block-code"><code>sudo gpasswd -a ${USER} render
newgrp render</code></pre>


<a rel="noopener" target="_blank" href="https://qiita.com/yamakenjp/items/36c28163a40445146f7f" title="intel Arc GPUでHWEncode環境 - Qiita" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Fadvent-calendar-ogp-background-7940cd1c8db80a7ec40711d90f43539e.jpg%3Fixlib%3Drb-4.0.0%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkYwJTJGNTQyMDUlMkZwcm9maWxlLWltYWdlcyUyRjE2NzU4NTY2MDY_aXhsaWI9cmItNC4wLjAmYXI9MSUzQTEmZml0PWNyb3AmbWFzaz1lbGxpcHNlJmJnPUZGRkZGRiZmbT1wbmczMiZzPTE5OTk2NjE2OGJlMzhjNTlmMjNiYmE2ZjQ4YjVmZTVj%26blend-x%3D120%26blend-y%3D462%26blend-w%3D90%26blend-h%3D90%26blend-mode%3Dnormal%26mark64%3DaHR0cHM6Ly9xaWl0YS1vcmdhbml6YXRpb24taW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkZxaWl0YS1vcmdhbml6YXRpb24taW1hZ2UlMkYxNmJlMjM1NTQ4MjZkOGE4NDRiNzQwMTg3MGM2OTNhOGE2YmUwOWI1JTJGb3JpZ2luYWwuanBnJTNGMTQ4MjgwNzAwNz9peGxpYj1yYi00LjAuMCZ3PTQ0Jmg9NDQmZml0PWNyb3AmbWFzaz1jb3JuZXJzJmNvcm5lci1yYWRpdXM9OCZiZz1GRkZGRkYmYm9yZGVyPTIlMkNGRkZGRkYmZm09cG5nMzImcz03MjI1NTIwY2ViZTkzMTMwNTdiOTA0MTQxMjE3YTg0YQ%26mark-x%3D186%26mark-y%3D515%26mark-w%3D40%26mark-h%3D40%26s%3D3ffb25131e42b43c274abde4935b5e65?ixlib=rb-4.0.0&#038;w=1200&#038;fm=jpg&#038;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9aW50ZWwlMjBBcmMlMjBHUFUlRTMlODElQTdIV0VuY29kZSVFNyU5MiVCMCVFNSVBMiU4MyZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzM0EzQzNDJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1wYWQ9MCZzPTM2NjkxNWZjYmM5YzJhZGE1OTI4NDU0M2QzYmFmMjYz&#038;mark-x=120&#038;mark-y=112&#038;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDB5YW1ha2VuanAmdHh0LWNvbG9yPSUyMzNBM0MzQyZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtcGFkPTAmcz0zYTM3ZjQ2NTgyZTJhMDYwZWFhNGNmMTgxZjFjYmY4ZQ&#038;blend-x=242&#038;blend-y=454&#038;blend-w=838&#038;blend-h=46&#038;blend-fit=crop&#038;blend-crop=left%2Cbottom&#038;blend-mode=normal&#038;txt64=44GV44GP44KJ44Kk44Oz44K_44O844ON44OD44OI5qCq5byP5Lya56S-&#038;txt-x=242&#038;txt-y=539&#038;txt-width=838&#038;txt-clip=end%2Cellipsis&#038;txt-color=%233A3C3C&#038;txt-font=Hiragino%20Sans%20W6&#038;txt-size=28&#038;s=f7770db429ee267eae07774608d2ada6" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">intel Arc GPUでHWEncode環境 &#8211; Qiita</div><div class="blogcard-snippet external-blogcard-snippet">さくらのアドベントカレンダー2022 20日目の記事です。 どうも、さくらインターネット やまけんです。 2日目で さくらのクラウドでUniFi Network Applicationを動かす こちらの紹介をしましたが、今度はGPUでのハー&#8230;</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://qiita.com/yamakenjp/items/36c28163a40445146f7f" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">qiita.com</div></div></div></div></a>]]></content:encoded>
					
					<wfw:commentRss>https://globe3.ddns.net/wp/astronomy-ubuntu-pc-setup/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>山本 一清さん と 天文趣味</title>
		<link>https://globe3.ddns.net/wp/mr-issei-yamamoto-amateur-astronomers/</link>
					<comments>https://globe3.ddns.net/wp/mr-issei-yamamoto-amateur-astronomers/#respond</comments>
		
		<dc:creator><![CDATA[minmin]]></dc:creator>
		<pubDate>Tue, 22 Apr 2025 06:22:05 +0000</pubDate>
				<category><![CDATA[天文]]></category>
		<category><![CDATA[雑感]]></category>
		<guid isPermaLink="false">https://globe3.ddns.net/wp/?p=460</guid>

					<description><![CDATA[滋賀県出身の天文学者1920年 (大正9年) にアマチュアを中心とした天文同好会を創立しました。 山本さんは、天文学を研究者のみの閉じた世界にせず、アマチュアに積極的に参加してもらうために、星や宇宙の書籍を多く執筆しまし [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">滋賀県出身の天文学者<br>1920年 (大正9年) にアマチュアを中心とした天文同好会を創立しました。</p>



<p class="wp-block-paragraph">山本さんは、天文学を研究者のみの閉じた世界にせず、アマチュアに積極的に参加してもらうために、星や宇宙の書籍を多く執筆しました。<br>彼は『天界』でも、天文学の基礎や天体ごとの具体的な観測方法を伝えました。<br>天文同好会（後の東亜天文学会）では、機関誌『天界』を発行しています。<br><br>山本一清さんの言葉</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">学者たる人々を相当以上に尊敬し、アマチュアを単なる「物好き」以外の何者でもないと認める人が多いが、之は大なる誤りである。<br>自分は天文学上において、所謂アマチュアと専門家との階級別を認めない。<br>学の進歩は此の二方面協力あってこそ健全に実現するのである。<br>『天界』より</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">アマチュアは、(中略) 常に新と奇とを求めて、飽きず、いつも、人生のひろい立場から学術を見る。<br>広い「人世」の文化発展のためにはアマチュアこそ誠に貴重な存在と言わねばならない。<br>『天界』第15巻 第165号</p>
</blockquote>



<p class="wp-block-paragraph">勇気をもらえる言葉です。</p>



<p class="wp-block-paragraph">サカナクション『怪獣』 も勇気をもらえる曲です。<br></p>
]]></content:encoded>
					
					<wfw:commentRss>https://globe3.ddns.net/wp/mr-issei-yamamoto-amateur-astronomers/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>小石川さんのこと</title>
		<link>https://globe3.ddns.net/wp/with-thanks-koishikawa-masahiro/</link>
					<comments>https://globe3.ddns.net/wp/with-thanks-koishikawa-masahiro/#respond</comments>
		
		<dc:creator><![CDATA[minmin]]></dc:creator>
		<pubDate>Mon, 17 Mar 2025 13:14:32 +0000</pubDate>
				<category><![CDATA[天文]]></category>
		<category><![CDATA[雑感]]></category>
		<guid isPermaLink="false">https://globe3.ddns.net/wp/?p=35</guid>

					<description><![CDATA[久しぶりに読んだ『天文ガイド』以前と同じ人が、ライターやコーナー担当として、名前があって懐かしい。 「小石川正弘さんの思い出」が載ってました。だいぶ前に、仙台天文台を訪れた時、展示を見ていると小石川さんとすれ違った。小石 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">久しぶりに読んだ『天文ガイド』<br>以前と同じ人が、ライターやコーナー担当として、名前があって懐かしい。</p>



<p class="wp-block-paragraph">「小石川正弘さんの思い出」が載ってました。<br>だいぶ前に、仙台天文台を訪れた時、展示を見ていると小石川さんとすれ違った。<br>小石川さんの活躍を、眩しげに書籍で見ていた自分は、本人を目の前に、思わず「あ゛っ!」と声を上げた。</p>



<p class="wp-block-paragraph">驚かせて、びっくりした顔をされてましたが、その後は親しげに言葉をかけて頂き、話しができました。<br>初めて会う自分と、展示のことや、天文のこと、仕事や勉強のことを短い時間だったが、多くのことを話せたと思いました。<br>懐かしく思い返すと同時に、改めて、感謝の想いを届けたいと感じます。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://globe3.ddns.net/wp/with-thanks-koishikawa-masahiro/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
