質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

Q&A

0回答

602閲覧

telemetrix-rpi-pico クライアントのC++実装

hoshinom78

総合スコア0

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

0グッド

0クリップ

投稿2021/10/06 13:40

前提・実現したいこと

github.com/MrYsLab/telemetrix-rpi-pico

のクライアントのC++実装を探しています。

あるいは、python実装のクライアントを、C++に変換する方法を。

発生している問題・エラーメッセージ

ラズパイPicoをサーバー、
他のマイコンをクライアントとして、
Firmata的なことをしたいです。

telemetrix-rpi-picoが正に、Firmata的な物です。

ですが、クライアントがpython実装で、
クライアントとして使いたいマイコンは、
C++しか使えません。(GR-Lycheeです。)

試したこと

cythonは、pythonをC++に変換している、との事で、
その中間ファイルであるところの、C++を手に入れれば、
流用できるかもしれない、と考えました。

ですが、pythonの素人なので、
環境構築の段でつまずきました。

補足情報(FW/ツールのバージョンなど)

OSはWindows 10 Pro 21H1で、
その上にWSLでUbuntu 20.04 LTSを入れています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2021/10/06 23:03

全体としてなにをしたいのかにもよりますが、単にリモートコマンドのようなものを自分で実装するのでは足りないのですか?
hoshinom78

2021/10/07 08:48

はい、確かにそれでも良いのですが、より汎用性が高い方が嬉しいです。 アルディーノのFirmataのように、picoにサーバをインストールして、 クライアントからpicoのIOを操作できないか?と考えました。 調べた所、picoで使えるFirmata風のライブラリとして、telemetrix-rpi-picoがありました。
hoshinom78

2021/10/07 08:51

telemetrix-rpi-picoのクライアントは、pythonで書かれていて、WindowsなどからpicoのIOを操作できます。 Windowsの代わりに、GPIOが物足りないマイコンをクライアントとして使えないか考えました。
hoshinom78

2021/10/07 08:52

マイコンとして、3.3V系のGR-lycheeを使っています。 GR-lycheeは、pythonを動かせないので、C++でクライアントのライブラリを書く必要があります。
hoshinom78

2021/10/07 08:55

そこで、pythonのクライアントを、C++に移植する参考の為に、cythonが中間ファイルとして生成するC++のソースを使えないか?と考えました。
hoshinom78

2021/10/07 12:49

Pico側(サーバ側)のソースはC++でした。 クライアント側のPythonのソースと合わせて見て、LED点灯までは行きました。 しかし、LED消灯が出来ません。
hoshinom78

2021/10/07 12:49

void setup() { // put your setup code here, to run once: Serial4.begin(115200); { unsigned char pin = LED_PIN; unsigned char mode = DIGITAL_OUTPUT; std::vector<unsigned char> command{ SET_PIN_MODE, pin, mode}; _send_command(command); } } void loop() { // put your main code here, to run repeatedly: //LED点灯 { unsigned char pin = LED_PIN; unsigned char value = 1; std::vector<unsigned char> command{ DIGITAL_WRITE, pin, value}; _send_command(command); } delay(1000); //※LED消灯、のハズが消えない { unsigned char pin = LED_PIN; unsigned char value = 0; std::vector<unsigned char> command{ DIGITAL_WRITE, pin, value}; _send_command(command); } delay(1000); } void _send_command(std::vector<unsigned char> &command) { command.insert(command.begin() + 0, command.size()); const unsigned char *send_message = command.data(); Serial4.write(send_message, command.size()); Serial4.flush(); }
thkana

2021/10/07 22:11

> GR-lycheeは、pythonを動かせない MicroPythonであれば、 https://interface.cqpub.co.jp/magazine/202110/ の特集2あたりを参考にすれば移植も無茶ではないでしょうけれど。 C++でやるにしても、telemetrix-rpi-pico とやらのUARTレベルの通信仕様を手に入れて、それを見ながらプログラムを書くほうがよいのでは。Pythonの素人と自称するのならPythonを絡めないほうがいいような気もします。 > LED消灯が出来ません。 それはこの質問とは別の話では。
hoshinom78

2021/10/08 04:03

情報ありがとうございます。 脱線してしまい申し訳ありません。 おっしゃる通り、pythonのコードを読むには力不足なので、静的解析でなく動的解析に行こうかと考えています。
hoshinom78

2021/10/08 04:05

ドキュメントを読み込みつつ、 pythonクライアントからGR-lycheeに繋いで、クライアントが発行するコマンドを確認して動的解析しようかと。
hoshinom78

2021/10/08 04:08

その為に、まずはpythonの環境構築の方法を調べます。
thkana

2021/10/09 01:26

その"telemetrix"にこだわりがなくて、C++がわかっているのならfirmata(の必要部分)をpicoに乗っけるほうが楽だったりしないかしら? C++のクライアントってのは無いみたいだけれど(標準でシリアルいじれないから?) https://github.com/firmata でそれなりの情報は拾えるし。 私の知る限り、 > より汎用性が高い方が嬉しい ならfirmataの方が普及している分より嬉しい気がします。
hoshinom78

2021/10/09 15:58

PicoのUARTについて、勘違いしていました。 USBと、UART0(GP0とGP1)は、同じ扱いだと思っていました。 ・Raspberry Pi Picoでシリアル通信する方法 https://garchiving.com/how-to-use-uart-with-pico/ 『ArduinoIDEで利用する場合、SirialUSB/UART クラスから SerialUSB Serial; SerialUART Serial1; // HW UART 0 SerialUART Serial2; // HW UART 1 でそれぞれ変数が定義されてます』 からすると、別々の扱いの様です。
hoshinom78

2021/10/09 16:03

CMakeLists.txt に pico_enable_stdio_usb(Telemetrix4RpiPico 1) とあったので、USBを使ってSerial通信しています。 (パソコンと通信するのだから当たり前ですが。) ・macOSからPi Picoを使う [Pi Pico] https://decafish.blog.ss-blog.jp/2021-05-12 3.1 pico_stdio 『出力先はUART(シリアルポート)とUSBのふたつが使える。USBのためにはTinyUSBがインストールされてないといけない。さらにCMakeLists.txtの中に pico_enable_stdio_uart(hello_world 0) pico_enable_stdio_usb(hello_world 1) とする。これはstdin、stdoutをUARTではなくUSBにする、という宣言らしくて、こうするとTinyUSBが自動的にリンク(というかソースからコンパイルするmakefileが生成される。』
hoshinom78

2021/10/09 16:07

マイコン間は、USBでなく、GPIOのUART(TX,RX)で通信するので、gr-lycheeから操作できなくて当然でした。 CMakeLists.txt を書き換えて、makeし直すべく、環境構築中です。
hoshinom78

2021/10/10 11:41

アイデアありがとうございます。 makeで詰まったので、 まずは、firmata(の極一部)をPicoに移植して、 USB接続でWindowsから操作することから始めようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問