良いニュースは、この安価な Xiamen ELANE.NET ロード セルが USB でレポート 3 モードにパワーアップすることです。現在の重量をグラム単位で絶えずバーフィングします。
そのデータシートは次のとおりです。
http://www.elane.net/USBscales/List_USB_Digital_Load_Cell_Commands_and_Data_Format_User.pdf
私はそれを標準的なpyusb
呼び出しで読むことができます。このサンプルはスケールを読み取ることができます...
http://www.orangecoat.com/how-to/read-and-decode-data-from-your-mouse-using-this-pyusb-hack
...デバイスルックアップを次のように置き換えた場合usb.core.find(idVendor=0x7b7c, idProduct=0x301)
(私は自分のプログラムを実行することも乱用sudo
します。bc は、デバイスのアクセス許可をいじることを拒否しsudo
、Raspberry Pi では簡単です。)
標準pyusb
呼び出しを使用すると、スケールのスピューを次のように読み取ることができます。
device.read(endpoint.bEndpointAddress, endpoint.wMaxPacketSize)
これは 6 バイトの配列を返します。
+--------------------- Report type
| +------------------ Weight Stable (tray not moving)
| | +--------------- grams (not pounds)
| | | +------------ whatever
| | | | +--------- 2 grams
| | | | | +------ 0 x 256 grams
| | | | | |
V V V V V V
[3, 4, 2, 0, 2, 0]
体重計にコマンドを送信しようとすると、楽しみが始まります。現在の重量をゼロにするコマンド (Zero Weight、別名「風袋」) は7 4 2 0 0 0
.
https://github.com/walac/pyusb/blob/master/docs/tutorial.rstのようなサンプル コードを使用して ENDPOINT_OUT エンドポイントを検索し、これらの行のいずれかを使用してそれに書き込む場合、私は風袋できません:
# ep_out.write('\x07\x04\x02\x00\x00\x00', 6)
ep_out.write([0x07, 0x04, 0x02, 0x00, 0x00, 0x00], 6)
(症状としては、ロード セルに荷重をかけて、上記の線で重量を量り、風袋引きを行った後、再び.read()
ゼロにならないということです。).read()
よし、私たちはまだ死んでいない。HIDAPI は試していません。それで、apt-get
私は some libusbhid-common
、 some cython-dev
、 some libusb-dev
、 some libusb-1.0.0-dev
、および somelibudev-dev
と、風袋引きを試みるために HIDAPI C のサンプル コードをアップグレードします。
handle = hid_open(0x7b7c, 0x301, NULL);
buf[0] = 0x07;
buf[1] = 0x04;
buf[2] = 0x02;
res = hid_write(handle, buf, 3);
そして、それは風袋です。
私の 1 つの成功を Python で再現するために (私のアプリの 1 つの小さなレイヤーを C++ で書き直すのは魅力的ですが!)、いくつかの Cython-hidapi (おそらく から) を取り出し、それらのサンプル コードgit://github.com/signal11/hidapi.git
をアップグレードします。try.py
h = hid.device()
h.open(0x7b7c, 0x301)
print("Manufacturer: %s" % h.get_manufacturer_string())
print("Product: %s" % h.get_product_string())
print("Serial No: %s" % h.get_serial_number_string())
res = h.write([0x07, 0x04, 0x02, 0,0,0])
何だと思う?最後の行は風袋引きしません。しかし、3回実行すると風袋がかかります!
res = h.write([0x07, 0x04, 0x02, 0,0,0])
res = h.write([0x07, 0x04, 0x02, 0,0,0])
res = h.write([0x07, 0x04, 0x02, 0,0,0])
それで、読み取りがレベル 0 を返すまで何度も風袋行を呼び出すループを書く前に、誰かが私の数学をチェックして近道を提案してくれませんか? 生のpyusb
ソリューションもうまく機能します。