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年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を使った便利な機能等も今後、紹介していきたいと思います。
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) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2024年03月16日

SC18IM700とSC18IM704の差

以前にUART I2Cプロトコルブリッジのリニューアル版について紹介しました。UART I2Cプロトコルブリッジの旧バージョンはSC18IM700リニューアル版はSC18IM704となって別の製品として販売されています。

ハードウェアについてはピンアサインやGPIOモード、IO電圧、バッファサイズで変更があります。ただし、SC18IM700とSC18IM704でコマンドの互換があるものの、設定の一部は互換性がなくなっているようです。今回は変更となっているコマンド部分の差について紹介したいと思います。


■I2C CLK
 I2C CLKはデフォルトでは100kHzの設定になっており、特別な理由がない限りは変更する必要がありません。CLKを落としてより通信を安定させたい場合やCLKを上げて少しでも通信レートを上げたい場合等で変更する必要があります。

 設定自体のレジスタアドレスは同じですが、設定値が変更になっています。SC18IM700では2つのレジスタを合わせた値がCLKとして反映されてる仕様(I2CClkHとI2CClkLの差がない)でしたが、SC18IM704は2つのレジスタに16bitで設定した値がCLKとして反映される仕様(I2CClkHとI2CClkLを区別する)に変更されています。

 個人的にはI2CClkHに値を設定すると大幅にCLKが低下するため、I2CClkHの用途が限定的で以前の仕様の方が利便性は良かったと感じました・・・


・SC18IM700

700_CLK.jpg

・SC18IM704
704_CLK.jpg



■I2C CTO
 I2C通信のタイムアウト時間設定はデフォルトでは無効化されています。

 SC18IM700の場合、CTOのビットのみを有効化したするとデフォルトのタイムアウト時間は230msec程度です。

 一方、SC18IM704の場合はI2C_CLKも設定値に関係する仕様になっています。I2C_CLKがデフォルトの100kHzの場合、CTOのデフォルトは35msec程度とタイムアウト時間が短くなっています。また最大でも90msec(I2C_CLK=100kHz)程度で設定可能なCTO時間の範囲が狭くなっています。

 個人的にはI2C_CLKに依存せず、CTOの調整幅が大きいため、以前の仕様の方が利便性は良かったと感じました・・・



・SC18IM700

700_CTO.jpg

・SC18IM704

704_CTO.jpg



なお、SC18IM700とSC18IM704をソフトウェア側で区別するためにはSC18IM704に搭載された「Read version function ID」コマンドを利用することで確認することが可能です。アスキーで「VP」の文字列(0x56,0x50)を送信することで「SC18IM704 1.0.2」という感じで応答を確認することが可能です。応答がない場合はSC18IM700と区別できます。

後継のSC18IM704はIO電圧、バッファサイズ等、拡張が行われている一方でレジスタ設定については以前の仕様の方が利便性が良いと感じました。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする