2024年08月17日

TkEasyGUIへの移行

Pythonで簡易的なアプリを作成する際に便利なライブラリとしてPySimpleGUIがあります。ただ、商用ユースでは先日から有償化され、個人ユースであってもライセンス登録が必要です。ライブラリ自体の使い勝手という点で難があるため、PySimpleGUIと互換性があるTkEasyGUIに移行してみました。ただし、互換性があるといっても完全互換ではないため、今までのコードそのままでは動かない場合が多々あります。

今回は自作アプリをTkEasyGUIに移行した際に互換性がなく、コード修正が必要になった箇所について紹介します。自作アプリ内で気づいた範囲のため、その他にも互換性がない箇所があると思いますが、今回分かった範囲で紹介したいと思います。


⓪ライブラリの変更
当然ながらライブラリを変更します。

import TkEasyGUI as sg
#import PySimpleGUI as sg


@テーマ
テーマ名が異なるため、'DarkGreen6'等のテーマは使用できません。
コメントアウトするか、下記のようにデフォルトもしくはwinライクなテーマを設定する必要があります

sg.theme('default')
sg.theme('winnative')

Aupdate
Updateからupdateに修正が必要です

window["-msg-"].Update("Some Message")
window["-msg-"].update("Some Message")

Brefresh
Refreshからrefreshに修正が必要です
window.Refresh()
window.refresh()

Cvalue
テキストボックスのvalueはTkEasyGUIでは定義されていません。
下記のように第一引数に変更する必要があります。
window["-msg-"].(value='OK', text_color='#00F000')
window["-msg-"].('OK',text_color='#00F000')


Dvisible
見ないようにするvisible機能はTkEasyGUIでは定義されていません。
項目自体を削除するか、消したのと同じような処理に修正する必要があります。
visible=false
➡ないので削除する


互換性がないのは仕方ないことですが、ライブラリだけ移行するだけでは下記のように非常に分かりにくいエラーが発生するのみで原因を調べるのに苦労しました。上記のような修正をすることでTkEasyGUIに移行して同等の機能を確認することができました。


return self.tk.call(self._w, 'cget', '-' + key)
~~~~^~~~~
TypeError: can only concatenate str (not "int") to str

この他にも互換性がない部分について分かれば紹介してみたいと思います。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする

2024年07月20日

pico-sdkディレクトリ変更時のポイント

今回はRP2040でpico-sdkディレクトリを変更した際に忘れやすいポイントを覚書として紹介したいと思います。

通常、コードを変更してビルドする場合やPico Project Generatorで生成したプロジェクトの場合はbuildディレクトリに移動してmakeするだけです。一方でpico-sdkのディレクトリを変更した場合はCMakeLists.txt内のset(PICO_SDK_PATH "???/pico-sdk")を更新してもディレクトリが反映されず、古いディレクトリを参照してしまったり、pico-sdkのバージョン違いのエラーが発生してビルドに失敗する場合があります。パスをexport PICO_SDK_PATH=???/pico-sdkのように追加しても失敗する場合があります。

このような場合はビルドディレクトリに移動後、makeする前にでcmake ..を実行し、ビルド環境を再構築する必要があります。

普段はmakeのみでビルドできますが、pico-sdkディレクトリ等の環境を変更した場合はcmake ..のビルド環境の再構築が必要です。普段は再構築し直す必要がないため、忘れがちです。久しぶりだとそれに気づかず、ビルドが通らない原因の調査に時間を要してしまいました。ポイントはcmake ..です。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする

2024年06月15日

flashrom初期化エラー

SPI Flashを高速に読み書きするツールにflashromがあります。flashromは対応しているメモリやライタが豊富なため、非常に便利です。今回はflashromを久しぶりに使用する際に初期化エラーに遭遇したため、その対処方法について紹介したいと思います。

flashromは様々なライタに対応するため、USBインタフェースのライブラリとしてlibusbを使用しています。そのため、特にWindows版のflashromにおいて、ライタの標準ドライバそのままでは下記のようなエラーが出て、初期化に失敗します。ライタの標準ドライバからlibusbに対応したドライバに変更する必要があります。


■CH341Aのエラー例
flashrom -p ch341a_spi

libusb: info [init_device] 0x45b:0x82a0 found 1 configurations but device isn't configured, forcing current configuration to 1
Couldn't open device 1a86:5512.
Error: Programmer initialization failed.


■CP2102Nのエラー例
flashrom -p developerbox

Opening the USB device at address 1-25 failed (LIBUSB_ERROR_NOT_SUPPORTED)!
Could not find a Developerbox programmer on USB.
Error: Programmer initialization failed.

■FT232Hのエラー例
flashrom -p ft2232_spi:type=232H

Unable to open FTDI device: -4 (usb_open() failed)
Error: Programmer initialization failed.

■標準ドライバからlibusbにドライバに変更する方法

⓪今回はWindows版flashromとしてこちらのバイナリを使用しました。flashromのバイナリの他にドライバを変更するツールzadig-X.X.exeも同梱されています。

@デバイス検索
flashromのバイナリに同梱されているzadig-X.X.exeを起動させ、OptionからList All Devicesをクリックします。


driver_search.png

Aリストからライタとして使用するデバイスを選択後、置き換える対象として「WinUSB」を選択してReplace Driverをクリックします。
今回はUSB-EPP/I2C CH341Aを選択しました。なお、ドライバ変更を伴うため、ライタ以外のデバイスを選択しないように注意してください。

driver_install.png

上記で数分待つと自動的にドライバ変更が完了します。初期化エラーが解消し、flashromで使用できるようになります。ただし、これまで標準ドライバで動いていたソフトウェアが逆に動作しなくなるor認識できなくなるため、flashrom以外の用途で使用する場合はドライバを標準ドライバに戻す必要があります。特にCP2102やFT232等ではWinUSBドライバに変更するとWindows側からCOMポートとして認識されなくなるため、flashrom以外の用途で使用する場合は注意が必要です。

その場合は下記のようにライタとして使用するデバイスを選択後、置き換える対象として「USB Serial(CDC)」を選択してReplace Driverをクリックしてもとに戻すことで標準ドライバに戻すことが可能です。


driver_back.png



特にややこしい点として、使用するライタによってlibusbのエラー出力が異なるため、久しぶりにflashromを使用すると何が原因なのか調査に時間を要してしまいました。今後、flashromを活用した便利なコマンド例等を紹介したいと思います。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする

2024年05月25日

StepからSVGへの変換

メカ設計に限らず、電気設計でも部品やコネクタ等の3Dデータから2Dデータに変換してイメージ図を作成する機会があると思います。今回はStepファイルを2Dに落とし込む際にベクトルデータのままSVGファイルに変換する方法について紹介したいと思います。

今回はStepファイルからSVGファイルへの変換としてFreeCADを使用します。

@FreeCADを起動し、Stepファイルを開きます

freecad1.jpg


A必要に応じて2Dデータとして落とし込みたい向きにビューを変更します
数字の1~6を押すと向きを簡単に変更できます

freecad2.jpg

B続いて2Dデータに落とし込むために「TechDraw」をクリックします

freecad3.jpg

C「TechDraw」のデフォルトページ挿入のボタンを押します

freecad4.jpg

DStepファイルのオブジェクトをクリックして、ビュー挿入をクリックします

freecad5.jpg

EPageをクリックし、SVGエクスポートボタンを押してSVGファイルを保存します

freecad6.jpg

なお、デフォルトでは図面の枠や背景もSVGファイルとして出力されてしまいます。もし、それらを除く場合は下記のようにtemplateをクリックし、templateを変更します。例えば、「A4_Landscape_blank.svg」に変更すると図面の枠や背景なしで出力することが可能です。

また、3Dプリンタ出力用のSTLファイル等のソリッドになっていないファイルの場合はそのまま「TechDraw」で2D平面に落とし込むことができません。ソリッド変換してから2D平面に落とし込む必要があります。最初にBで「TechDraw」をクリックする前に「Part」をクリックし、「パート」内の「メッシュから形状を作成」をクリックします。その後、生成された形状ファイルをクリックし、「パート」内の「ソリッドに変換」をソリッドに変換してからBの「TechDraw」で2D平面に落とし込んでください。


生成したSVGファイルはInkscape等で編集することが可能です。FreeCADを使った便利な機能等も今後、紹介していきたいと思います。

■追記
インストールが面倒な場合や変換ファイル数が多い場合はWebサービスを活用すると便利です。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする

2024年04月20日

Web USB Encoder Tool

以前にWeb HID APIを用いたMCP2210とWeb HID APIでブラウザを介して通信するツール、Web USB SPI Toolを紹介しました。今回はWeb HID APIとMCP2210を応用して、ブラウザを介して簡単にSPI接続の磁気エンコーダの角度を読み込むツール、Web USB Encoder Toolを実装してみました。


WebUsbSpiEncoder.png

対応する磁気エンコーダはAMS製のAS5048A、MPS(Monolithic Power Systems)製のMA730/732に対応しています。ちょっとした動作確認や接続の確認等に便利です。接続後、開始/停止ボタンを押すと200msec毎に角度を読み込んで値が更新されます。

Web HID APIに対応したブラウザはEdgeもしくはChromeのみ対応となっており、24年1月時点ではFirefoxやSafariは対応していません。Web HID APIを用いることで専用のソフトウェアなしでブラウザ単体で様々なツールを実装できるのは非常に魅力的だと思いました。今後もWeb HID APIを用いた応用的な機能を開発して順次公開したいと思います。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする