<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title><![CDATA[ No.131 - 電装工芸日記 - 舞台照明機器の製作とか - ]]></title>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi</link>
	<description><![CDATA[ 今年は開発案件を進めたい ]]></description>
	<language>ja</language>
	<copyright>Copyright 2026</copyright>
	<lastBuildDate>Fri, 24 Apr 2026 07:46:09 +0900</lastBuildDate>
	<generator><![CDATA[ <!-- てがろぐ Version: -->Powered by <a href="https://www.nishishi.com/cgi/tegalog/" target="_top">てがろぐ</a> Ver 3.4.0 ]]></generator>
	<!-- BEGIN ENTRIES -->
	<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　Art-Netの受信データをデコードする処理を書いてみまし… ]]></title>
	<description><![CDATA[ 　Art-Netの受信データをデコードする処理を書いてみました。<br />　製作環境はRspberryPi4、Rasbian_buster、Python 3.7.3です。<br />------<br /><br />import numpy as np<br /><br />class coding&#58;<br />　def decode(self, artnet_packet)&#58;<br />　　&quot;&quot;&quot; Art-Netのbyte列を要素に分解する &quot;&quot;&quot;<br />　　id = artnet_packet&#91;0&#58;8&#93;<br />　　opcode = int.from_bytes(artnet_packet&#91;8&#58;10&#93;, &apos;little&apos;)<br />　　prover = int.from_bytes(artnet_packet&#91;10&#58;12&#93;, &apos;big&apos;)<br />　　sequence = int.from_bytes(artnet_packet&#91;12&#58;13&#93;, &apos;little&apos;)<br />　　physical = int.from_bytes(artnet_packet&#91;13&#58;14&#93;, &apos;little&apos;)<br />　　subuni = int.from_bytes(artnet_packet&#91;14&#58;15&#93;, &apos;little&apos;)<br />　　sub = subuni // 16<br />　　uni = subuni % 16<br />　　net = int.from_bytes(artnet_packet&#91;15&#58;16&#93;, &apos;little&apos;)<br />　　length = int.from_bytes(artnet_packet&#91;16&#58;18&#93;, &apos;big&apos;)<br />　　data = np.frombuffer(artnet_packet, dtype=np.uint8, count=length, offset=18)<br />　　return (id, opcode, prover, sequence, physical, net, sub, uni, length, data)<br /><br />if __name__ == &apos;__main__&apos;&#58;<br />　an = coding()<br />　id, opcode, prover, sequence, physical, net, sub, uni, length, data_uint8 = an.decode(test_artnet_packet)<br /><br />※ 行頭の空白には全角を使っています。<br />------<br />　test_artnet_packetに受信データを入れ、codingのインスタンスanでdecodeを呼び出します。<br />　書いてみたら案外スッキリした物になったので記念に掲載しました。<br /><br />　socketで受信するのはバイナリデータ(Pythonで言うところのバイト列)ですが、これを一発でnumpy.arrayに変換してくれるnumpy.frombufferは便利です。<br />　int.from_bytesもバイト列をエンディアン指定でint数に一発変換してくれて便利です。<br />　私はPICマイコンと協調させて使うことが多いので、こういった機能があると助かります。<br /><br />　上記ですとdataの戻り値がnumpy.uint8ですが、計算するためにはnumpy.uint16の方が良いと思います。<br />　data_uint16 = data.astype(np.uint16)<br />　とかで型変換するといいかもしれません。<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%50%79%74%68%6f%6e" class="taglink" title="Python">#Python</a> <a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%41%72%74%2d%4e%65%74" class="taglink" title="Art-Net">#&#91;Art-Net&#93;</a>  -- Posted by 電装工芸 〔1415文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=131</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=131</guid>
	<category>tegalog</category>
	<pubDate>Sun, 13 Feb 2022 18:03:17 +0900</pubDate>
</item>

	<!-- END ENTRIES -->
</channel>
</rss>

