瀏覽代碼

...

* pushed buck converter up to not collide with bracket
* PIU notes to not forget references and other thoughts
clementinecomputing 6 年之前
父節點
當前提交
f72d68b9fa
共有 1 個文件被更改,包括 142 次插入0 次删除
  1. 142 0
      experiment/production/PIU-Notes.md

+ 142 - 0
experiment/production/PIU-Notes.md

@@ -0,0 +1,142 @@
+PIU Notes
+===
+
+These are notes for the a PIU upgrade to include
+newer hardware.
+
+Overview
+---
+
+The PIU should be able to accept a variety of fare media,
+including magstripe cards (multiple track), RFIDs (125kHz and
+Mifare) and barcode/QR codes using a camera.
+
+The display should be such that communication is given back to
+the rider.
+The camera can also be used to potentially help with QR code alignment to
+the (down facing) camera.
+
+There's some investigation that should be done in terms of what, if any,
+gets offloaded to a microcontroller but the basic idea is:
+
+* The Raspberry Pi (Zero) manages the HID devices, camera and screen
+* The camera can be used to scan for QR codes
+* For QR code scanning, a passthrough of the camera to the screen can
+  be used for alignment
+* The touch screen can be used for confirmation if need be
+* Whatever is used for communication back to the DIU can use the same
+  protocol already in place
+
+By having a microcontroller (Arduino, say) that's in charge of communication or
+the RFID and Magstripe devices, this provides an 'instant on' for that portion
+of the PIU.
+Putting everything behind the Raspberry Pi is conceptually simpler but is sluggish
+to boot up.
+
+Requirements
+---
+
+* Housing
+* 12-24v in (requires buck converter)
+* Display
+* RFID reader (125kHz and Mifare?)
+* Magstripe reader (3 tracks)
+* Camera
+* Arduino
+
+RFID Reader
+---
+
+Some electronics speak "Wiegand Protocol".
+
+There's an Arduino library that has appropriate code (from [monkeyboard](https://github.com/monkeyboard/Wiegand-Protocol-Library-for-Arduino)).
+
+I'm also unclear as to what the current system RFID media uses.
+
+Display
+---
+
+There's a [2.8 inch touch display](http://www.raspberrypiwiki.com/index.php/2.8_inch_Touch_Screen_for_Pi_zero) that could be a candidate ([MZDPI](https://github.com/tianyoujian/MZDPI)).
+
+Apparently there's a simple install script:
+
+```
+cd ~/
+git clone https://github.com/tianyoujian/MZDPI.git
+cd MZDPI/vga
+sudo chmod +x mzdpi-vga-autoinstall-online
+sudo ./mzdpi-vga-autoinstall-online
+sudo reboot
+```
+
+Camera
+---
+
+I would recommend a Pi NoIR that can be hooked into the Pi Zero ([Adafruit](https://www.adafruit.com/product/3100)).
+
+I've had success in getting it up and running with a Raspberry Pi Zero before and it might be easy to set up and fast enough to use.
+
+
+
+Notes
+---
+
+Some of the peripherals act as keyboard input devices.
+In order to not have them pollute input, they need to be
+taken over by a process.
+
+[SO](https://stackoverflow.com/questions/1698423/how-can-you-take-ownership-of-a-hid-device) has
+an article on it.
+More investigation needs to be done but the basics look to be:
+
+* Use the "event device interface" `/dev/input/event*` to look for the device
+* Use an `ioctl` `EVIOCGRAB` call to get exclusive use of the device
+
+---
+
+```
+cat /proc/bus/input/devices  | grep -P '^[NH]: ' | paste - -
+```
+
+---
+
+There's a [Python tutorial](https://python-evdev.readthedocs.io/en/latest/tutorial.html) that looks to have an easy way to do this:
+
+```
+import evdev
+import asyncio
+dev = {}
+
+evfns = [ "/dev/input/event0", "/dev/input/event1", ... , "/dev/input/event12" ]
+
+for evfn in evfns:
+  _dev = evdev.InputDevice(evfn)
+  if dev.name == HID_NAME:
+    dev = _dev
+    break
+
+dev.grab()
+
+async def print_events(device):
+  async for event in device.async_read_loop():
+    print(device.path, evdev.categorize(event, sep=': ')
+
+for device in dev:
+  asyncio.ensure_future(print_events(dev))
+
+...
+
+```
+
+The above has to be played around with but it looks like the seeds are there.
+
+
+References
+---
+
+* [SO: Ownership of HID device](https://stackoverflow.com/questions/1698423/how-can-you-take-ownership-of-a-hid-device)
+* [Python evdev tutorial](https://python-evdev.readthedocs.io/en/latest/tutorial.html)
+* [GitHub: monkeyboard/Wiegand-Protocol-Library-for-Arduino](https://github.com/monkeyboard/Wiegand-Protocol-Library-for-Arduino)).
+* [2.8 inch touch display](http://www.raspberrypiwiki.com/index.php/2.8_inch_Touch_Screen_for_Pi_zero)
+* [GitHub: tianyoujian/MZDPI](https://github.com/tianyoujian/MZDPI)
+