2023年1月 この範囲を時系列順で読む この範囲をファイルに出力する
オレメモであります。
参考になりそうな先達のページ
● UDP/IP通信全体の参考
UDP / IP でパケットの送受信を行う
● broadcast通信の参考
UDPブロードキャスト送信サンプル
● ネットワークデバイスを指定した通信の参考
Ethernetインターフェース(eth0, eth1)を指定してソケットを作成する (Linux, C, Raspberry Pi)
● 受信タイムアウトの参考
selectを使用してタイムアウト付き受信を実現する <= recvもrecvfromも受信があるまでひたすら待ち続けるので、タイムアウトさせることは必須。
UDP通信におけるselectの使い方。 <= recvの例が多い中、recvfromの書式を確認出来る。recvfromを使う理由は送信元アドレスを取得したいから。
● 時間の扱い方
時間情報の取得方法と扱い方 <= これの5ページ目の「POSIX環境」が結構大事。DelayをするにもDMXのタイムアウトをするにもこれが必要。
● ターミナルの行長と行数を取得する
ターミナルのサイズを取得する
ターミナルの幅と高さを得る
● ANSIエスケープシーケンス
ANSIエスケープシーケンス チートシート
この辺りを参考にすれば「ネットワークデバイスを指定してbroadcastで通信する」が出来そうな気がします。
ただし、1行々々読み込んで使われている構造体をよく把握することが大切です。構造体の中に必要な情報が隠れていることが多いからです。構造体の中に構造体があったりもするので、十分に読み込まないといけません。
実験は受信が当面の課題となり、
1)ネットワークデバイスを指定せずArt-Netを受信する。<= とにかく受信する
2)ネットワークデバイスを指定してArt-Netを受信する。<= ネットワークデバイスを制限して受信する。
3)送信元IPアドレスを取得し、IPアドレスをもとに受信値を振り分ける。<= 複数の送信元(卓)がある場合の不確実性排除とミックス処理のためには不可欠。
といった手順で進めることになろうかと思います。
受信値を確認するため、習作を兼ね、バイナリをダンプ表示をするライブラリも作ってみましょう。
#C言語 #[Art-Net]
参考になりそうな先達のページ
● UDP/IP通信全体の参考
UDP / IP でパケットの送受信を行う
● broadcast通信の参考
UDPブロードキャスト送信サンプル
● ネットワークデバイスを指定した通信の参考
Ethernetインターフェース(eth0, eth1)を指定してソケットを作成する (Linux, C, Raspberry Pi)
● 受信タイムアウトの参考
selectを使用してタイムアウト付き受信を実現する <= recvもrecvfromも受信があるまでひたすら待ち続けるので、タイムアウトさせることは必須。
UDP通信におけるselectの使い方。 <= recvの例が多い中、recvfromの書式を確認出来る。recvfromを使う理由は送信元アドレスを取得したいから。
● 時間の扱い方
時間情報の取得方法と扱い方 <= これの5ページ目の「POSIX環境」が結構大事。DelayをするにもDMXのタイムアウトをするにもこれが必要。
● ターミナルの行長と行数を取得する
ターミナルのサイズを取得する
ターミナルの幅と高さを得る
● ANSIエスケープシーケンス
ANSIエスケープシーケンス チートシート
この辺りを参考にすれば「ネットワークデバイスを指定してbroadcastで通信する」が出来そうな気がします。
ただし、1行々々読み込んで使われている構造体をよく把握することが大切です。構造体の中に必要な情報が隠れていることが多いからです。構造体の中に構造体があったりもするので、十分に読み込まないといけません。
実験は受信が当面の課題となり、
1)ネットワークデバイスを指定せずArt-Netを受信する。<= とにかく受信する
2)ネットワークデバイスを指定してArt-Netを受信する。<= ネットワークデバイスを制限して受信する。
3)送信元IPアドレスを取得し、IPアドレスをもとに受信値を振り分ける。<= 複数の送信元(卓)がある場合の不確実性排除とミックス処理のためには不可欠。
といった手順で進めることになろうかと思います。
受信値を確認するため、習作を兼ね、バイナリをダンプ表示をするライブラリも作ってみましょう。
#C言語 #[Art-Net]
RTCを装着したRaspberryPiは正常のようです。
今後製作する装置にもRTCを装着したいのですが、電池切れをどうやって拾うか思案中です。
socketの実験は連休中に時間が取れず未対応です。
Art-Netの受信と送信を1台でこなすにはIPアドレス的には同じゾーンで装置は別という変な構成になります。その上、broadcastで受けてbroadcastで送るというこれもまた変な構成です。ですので、コピペで使える先例がありそうでありません。
RaspberryPiのPythonでは成功していることですから可能だと思いますが、C言語のsocketの方が設定すべきパラメータが多いため、Pythonには無かった設定をどうするかが難問なのです。難しいというより、「ネットワークデバイスを指定してbroadcastで通信する」という前提の先例が少なく、沢山のデータシートを継ぎハギしないと見えないことが多いために苦心しているところです。
#RaspberryPi #C言語 #[Art-Net]
今後製作する装置にもRTCを装着したいのですが、電池切れをどうやって拾うか思案中です。
socketの実験は連休中に時間が取れず未対応です。
Art-Netの受信と送信を1台でこなすにはIPアドレス的には同じゾーンで装置は別という変な構成になります。その上、broadcastで受けてbroadcastで送るというこれもまた変な構成です。ですので、コピペで使える先例がありそうでありません。
RaspberryPiのPythonでは成功していることですから可能だと思いますが、C言語のsocketの方が設定すべきパラメータが多いため、Pythonには無かった設定をどうするかが難問なのです。難しいというより、「ネットワークデバイスを指定してbroadcastで通信する」という前提の先例が少なく、沢山のデータシートを継ぎハギしないと見えないことが多いために苦心しているところです。
#RaspberryPi #C言語 #[Art-Net]
珍しく明日から3連休。すべてを自由に使えるワケではありませんがscocketのテストが出来そう。
Art-Netを扱える卓に繋いで実験しなければなりませんので場所が限られるのです。
#[Art-Net]
Art-Netを扱える卓に繋いで実験しなければなりませんので場所が限られるのです。
#[Art-Net]
RaspberryPiにRTC(リアルタイムクロック)を入れているのに起動の度に時間がずれる。
チェックしたところRTCモジュールの電池がダメになっています。定格3.3vのところ0.6vしかない。
RTCのチップはDS3231ですが、電池には充電タイプのLIR2032(LRではなくLIR)を使えばいいらしい。
amazonにあったのでポチる。先ほど届いたので取り付けたところRTCの機能が回復。
Art-Netエンジンのテストプログラムを書いていて気持ち悪かったのでスッキリしました。
追記
時刻合わせは
$ sudo ntpdate ntp.nict.jp
ネットワーク経由で現在時を取得し、
$ sudo hwclock -w
DS3231に書き込みます。
この手順をした後、電源を完全に切ってから起動すると時刻が合っているハズです。
時刻が初期化されてしまうならDS3231の電池がNGかと。
#RaspberryPi
チェックしたところRTCモジュールの電池がダメになっています。定格3.3vのところ0.6vしかない。
RTCのチップはDS3231ですが、電池には充電タイプのLIR2032(LRではなくLIR)を使えばいいらしい。
amazonにあったのでポチる。先ほど届いたので取り付けたところRTCの機能が回復。
Art-Netエンジンのテストプログラムを書いていて気持ち悪かったのでスッキリしました。
追記
時刻合わせは
$ sudo ntpdate ntp.nict.jp
ネットワーク経由で現在時を取得し、
$ sudo hwclock -w
DS3231に書き込みます。
この手順をした後、電源を完全に切ってから起動すると時刻が合っているハズです。
時刻が初期化されてしまうならDS3231の電池がNGかと。
#RaspberryPi
秋月電子通商さんでRaspberryPi4Bが販売されていました。
特需ですぐに無くなってしまう?
お金は辛いですが、とりあえず3個発注しました。
#RaspberryPi
特需ですぐに無くなってしまう?
お金は辛いですが、とりあえず3個発注しました。
#RaspberryPi
本業が落ち着いたので所属会社の作業部屋を片付けをしています。
コンセプトマシンで使うオンジナオイルの20Lの空き缶2個の処分で悩む。捨てようと思えば捨てられますが、一般家庭ゴミでは出せませんので面倒。
ならば、イスにしてしまいましょう。
上面に丸く切ったコンパネを貼り、床を傷つけないように底面の縁にゴムのエッジ材を取り回しました。すべて余り材とジャンク品で済んだので目先のお金はゼロ。
しばらくは作業部屋とジャンク材の片付けです。キレイ好きとは真逆ですが、次の作業のためにもやっておかないといけません。
#本業
コンセプトマシンで使うオンジナオイルの20Lの空き缶2個の処分で悩む。捨てようと思えば捨てられますが、一般家庭ゴミでは出せませんので面倒。
ならば、イスにしてしまいましょう。
上面に丸く切ったコンパネを貼り、床を傷つけないように底面の縁にゴムのエッジ材を取り回しました。すべて余り材とジャンク品で済んだので目先のお金はゼロ。
しばらくは作業部屋とジャンク材の片付けです。キレイ好きとは真逆ですが、次の作業のためにもやっておかないといけません。
#本業
Art-Netを受信する準備を進めています。
思った以上に面倒だったのはデータの比較です。受信値と期待値を比較して処理を分岐する処理は重要です。文字列ならstrcmp、バイナリならmemcmpを使います。どちらもstring.hの関数です。
どちらにしてもバイナリな感覚を持ち合わせていないと使えませんが、アセンブラに慣れた体にとって違和感はありませんし、ある意味とても明確な処理になるので悪い気はしません。Pythonが如何に簡単に書けるかを感じたりはしましたけどね。
あとはエンディアンの処理です。RaspberryPiはARM系なのでリトルエンディアンです。受信したArt-Netを仕分けて情報にするには2-4バイトのバイナリを数値化しないといけませんが、エンディアンを気にしながらバイナリを並べて処理します。並べたバイナリを数値化するにはカッコとアンパサンドを使った不思議な記述をしますが、理解不能なので定型句と思って使っています。
こんな底辺処理が整理出来たら受信テストですが、これらを先にやっておかないと受信値を人が読める形で表示することが出来ないのです。
#[Art-Net] #C言語
思った以上に面倒だったのはデータの比較です。受信値と期待値を比較して処理を分岐する処理は重要です。文字列ならstrcmp、バイナリならmemcmpを使います。どちらもstring.hの関数です。
どちらにしてもバイナリな感覚を持ち合わせていないと使えませんが、アセンブラに慣れた体にとって違和感はありませんし、ある意味とても明確な処理になるので悪い気はしません。Pythonが如何に簡単に書けるかを感じたりはしましたけどね。
あとはエンディアンの処理です。RaspberryPiはARM系なのでリトルエンディアンです。受信したArt-Netを仕分けて情報にするには2-4バイトのバイナリを数値化しないといけませんが、エンディアンを気にしながらバイナリを並べて処理します。並べたバイナリを数値化するにはカッコとアンパサンドを使った不思議な記述をしますが、理解不能なので定型句と思って使っています。
こんな底辺処理が整理出来たら受信テストですが、これらを先にやっておかないと受信値を人が読める形で表示することが出来ないのです。
#[Art-Net] #C言語
RaspberryPiをアップデートしたらネットワーク関連が動かなくなった。
起動パレードを見ると「Failed to start DHCP Client Daemon.」と出る。
このサイトの通り手直ししたら治った。
抜粋すると次の通り。
$ sudo nano /etc/systemd/system/dhcpcd.service.d/wait.conf
Change from:
[Service]
ExecStart=
ExecStart=/usr/lib/dhcpcd5/dhcpcd -q -w
To:
[Service]
ExecStart=
ExecStart=/usr/sbin/dhcpcd -q -w
wait.confを訂正するってことです。
#RaspberryPi
起動パレードを見ると「Failed to start DHCP Client Daemon.」と出る。
このサイトの通り手直ししたら治った。
抜粋すると次の通り。
$ sudo nano /etc/systemd/system/dhcpcd.service.d/wait.conf
Change from:
[Service]
ExecStart=
ExecStart=/usr/lib/dhcpcd5/dhcpcd -q -w
To:
[Service]
ExecStart=
ExecStart=/usr/sbin/dhcpcd -q -w
wait.confを訂正するってことです。
#RaspberryPi
ここ数日は本業で手一杯でした。ライトアップの施工があったのですが、建物の窓を光らせたいとのことで専用の行燈を製作してました。
簡単な作りではあったのですが思った以上に時間がかかり、徹夜して間に合わせたのはいいですが、その余波で心身共にキツイここ数日。
8月のお盆明けからの大連チャンでしたが、この後3月中旬までは緩い日程なので、各種製作や開発を進めて行けそうです。
同時にイロイロ進めますが、とにかくArt-Netエンジンを完成させたい。
Art-Netエンジンとは、Art-Netを受信し、Merge、In-Delay、Patch、Out-Curve、Out-Delayを施し、Art-Netとして送信するデバイスドライバの様なモジュールです。ユーザーインターフェースなどは別途製作ですが、これが完成すれば求めることの半分は完成です。
そのためにC言語を学習しているワケですが、ポインタ、構造体、共有メモリ、マルチプロセスの基本が見えてきましたので、これからしばらくはArt-Netの要であるscoketを試そうと思います。C言語でscoketを扱う情報は高位者による高位者向けの高度な物ばかりですが、幸いPythonでの前例がありますので、これをC言語に置き換える方向で読み解いていこうと思います。
学習を進めれば進める程「ライブラリの使い方はmanとヘッダーファイルを読めば分かるだろ!」という圧を強く感じますが、この感覚が自分にとっても当たり前になるように精進したいものです。
#C言語 #本業 #[Art-Net]
簡単な作りではあったのですが思った以上に時間がかかり、徹夜して間に合わせたのはいいですが、その余波で心身共にキツイここ数日。
8月のお盆明けからの大連チャンでしたが、この後3月中旬までは緩い日程なので、各種製作や開発を進めて行けそうです。
同時にイロイロ進めますが、とにかくArt-Netエンジンを完成させたい。
Art-Netエンジンとは、Art-Netを受信し、Merge、In-Delay、Patch、Out-Curve、Out-Delayを施し、Art-Netとして送信するデバイスドライバの様なモジュールです。ユーザーインターフェースなどは別途製作ですが、これが完成すれば求めることの半分は完成です。
そのためにC言語を学習しているワケですが、ポインタ、構造体、共有メモリ、マルチプロセスの基本が見えてきましたので、これからしばらくはArt-Netの要であるscoketを試そうと思います。C言語でscoketを扱う情報は高位者による高位者向けの高度な物ばかりですが、幸いPythonでの前例がありますので、これをC言語に置き換える方向で読み解いていこうと思います。
学習を進めれば進める程「ライブラリの使い方はmanとヘッダーファイルを読めば分かるだろ!」という圧を強く感じますが、この感覚が自分にとっても当たり前になるように精進したいものです。
#C言語 #本業 #[Art-Net]
C言語の教科書を幾つか読んでいます。
熟知した人でないと書けないことですが、熟知した人は初心者の気持ちを忘れた人たちです。どんなに優しく書こうとしても初心者向けの説明など書けません。部分的に初心者の理解を助けてくれる文章があるので複数読んだ方がいいのです。
お勧めというか、理解しやすかった教科書を2つご紹介します。
「新・明解C言語 入門編」
初心者が挫折しやすい変数の型、ポインタ、構造体を後回しにして書いているのでC言語の全体像が見えやすい。変数の型、ポインタ、構造体で悩みたくないなら他の言語を使うべきですが、冒頭から「変数の型がぁ~」「ポインタがぁ~」と書かれた解説書は挫折率が高い(俺評価)のでよろしくありません。簡単とは言いませんが、これは挫折し難い内容です。
「苦しんで覚えるC言語」
書籍にもなっていますが、webでも読める解説書です。途中息切れを感じるところはありますが、これはこれでわかりやすい。
あと、以前ご紹介した「改訂第3版(5版) ANSI C 対応 はじめてのC」は和文規格書かもしれません。わかりやすい記述も多いのですが、誰もが悩むポインタは触るだけだったりと、誰もが躓くところほど流している傾向があります。すでに習得している人の参考書としてなら悪くありませんケド。
ただ、総じて言えることですが、C言語はこの時代に初めてプログラムを書く人が使う言語ではありません。画面とキーボード、マウスで完結するシステムならPythonなどの高度にマネージされた言語を使うべきです。なぜなら、CPUのレジスタとかフラグ、メモリの概念が体に染み込んでいないと書式の意味を理解することが難しいからです。私の課題は対象がハードウェアですからPythonよりもC言語の方が適切ってだけです。
#C言語
熟知した人でないと書けないことですが、熟知した人は初心者の気持ちを忘れた人たちです。どんなに優しく書こうとしても初心者向けの説明など書けません。部分的に初心者の理解を助けてくれる文章があるので複数読んだ方がいいのです。
お勧めというか、理解しやすかった教科書を2つご紹介します。
「新・明解C言語 入門編」
初心者が挫折しやすい変数の型、ポインタ、構造体を後回しにして書いているのでC言語の全体像が見えやすい。変数の型、ポインタ、構造体で悩みたくないなら他の言語を使うべきですが、冒頭から「変数の型がぁ~」「ポインタがぁ~」と書かれた解説書は挫折率が高い(俺評価)のでよろしくありません。簡単とは言いませんが、これは挫折し難い内容です。
「苦しんで覚えるC言語」
書籍にもなっていますが、webでも読める解説書です。途中息切れを感じるところはありますが、これはこれでわかりやすい。
あと、以前ご紹介した「改訂第3版(5版) ANSI C 対応 はじめてのC」は和文規格書かもしれません。わかりやすい記述も多いのですが、誰もが悩むポインタは触るだけだったりと、誰もが躓くところほど流している傾向があります。すでに習得している人の参考書としてなら悪くありませんケド。
ただ、総じて言えることですが、C言語はこの時代に初めてプログラムを書く人が使う言語ではありません。画面とキーボード、マウスで完結するシステムならPythonなどの高度にマネージされた言語を使うべきです。なぜなら、CPUのレジスタとかフラグ、メモリの概念が体に染み込んでいないと書式の意味を理解することが難しいからです。私の課題は対象がハードウェアですからPythonよりもC言語の方が適切ってだけです。
#C言語
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105