<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.mapletaps.dougbtv.com/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.mapletaps.dougbtv.com/index.php?feed=atom&amp;namespace=0&amp;title=Special%3ANewPages</id>
		<title>veeOp Wiki - New pages [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.mapletaps.dougbtv.com/index.php?feed=atom&amp;namespace=0&amp;title=Special%3ANewPages"/>
		<link rel="alternate" type="text/html" href="http://wiki.mapletaps.dougbtv.com/Special:NewPages"/>
		<updated>2026-06-14T18:07:06Z</updated>
		<subtitle>From veeOp Wiki</subtitle>
		<generator>MediaWiki 1.21.2</generator>

	<entry>
		<id>http://wiki.mapletaps.dougbtv.com/REST_API</id>
		<title>REST API</title>
		<link rel="alternate" type="text/html" href="http://wiki.mapletaps.dougbtv.com/REST_API"/>
				<updated>2013-10-16T17:06:09Z</updated>
		
		<summary type="html">&lt;p&gt;Doug: /* Per node-i2c module readme on Raspbian */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installing &amp;amp; Configuring Node (on Raspbian) ==&lt;br /&gt;
&lt;br /&gt;
I used a guide @ [http://blog.rueedlinger.ch/2013/03/raspberry-pi-and-nodejs-basic-setup/ rueedlinger.ch] for installing an up-to-date Node.js, as the one from apt-get was quite out of date. Also, I didn't have luck with Node 10.5, so I went with Node 10.2.&lt;br /&gt;
&lt;br /&gt;
You download binaries, so it's very straight forward.&lt;br /&gt;
&lt;br /&gt;
 sudo mkdir /opt/node&lt;br /&gt;
 wget http://nodejs.org/dist/v0.10.2/node-v0.10.2-linux-arm-pi.tar.gz&lt;br /&gt;
 tar xvzf node-v0.10.2-linux-arm-pi.tar.gz&lt;br /&gt;
 sudo cp -r node-v0.10.2-linux-arm-pi/* /opt/node&lt;br /&gt;
&lt;br /&gt;
Change the default profile with&lt;br /&gt;
&lt;br /&gt;
 sudo nano /etc/profile&lt;br /&gt;
&lt;br /&gt;
And add these lines before &amp;quot;export PATH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 NODE_JS_HOME=&amp;quot;/opt/node&amp;quot;&lt;br /&gt;
 NODE_PATH=&amp;quot;/opt/node&amp;quot;&lt;br /&gt;
 PATH=&amp;quot;$NODE_JS_HOME/bin/:$PATH&amp;quot;&lt;br /&gt;
&lt;br /&gt;
And then log out and back in.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing NPM Modules ===&lt;br /&gt;
&lt;br /&gt;
Install &amp;quot;forever&amp;quot; as a global npm module. To do this you might have to set the proper path as root. &amp;quot;sudo su&amp;quot; is used here as a stop gap / work-around, I don't recommend it as a habit. If I could've done it a different way here, I would've. However, this worked so it's worth the two lines as su.&lt;br /&gt;
&lt;br /&gt;
 sudo su&lt;br /&gt;
 PATH=/opt/node/bin/:$PATH&lt;br /&gt;
 npm install forever -g&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
(If you install it local first, before that, you might have to uninstall both, and then install globally)&lt;br /&gt;
&lt;br /&gt;
=== Per node-i2c module readme on Raspbian ===&lt;br /&gt;
&lt;br /&gt;
After installing i2c, you'll need to configure that the modules are available.&lt;br /&gt;
&lt;br /&gt;
 sudo vi /etc/modules&lt;br /&gt;
&lt;br /&gt;
And add&lt;br /&gt;
&lt;br /&gt;
 i2c-bcm2708&lt;br /&gt;
 i2c-dev&lt;br /&gt;
&lt;br /&gt;
Then edit&lt;br /&gt;
&lt;br /&gt;
 sudo nano /etc/modprobe.d/raspi-blacklist.conf&lt;br /&gt;
&lt;br /&gt;
And comment out the i2c module so it looks like:&lt;br /&gt;
&lt;br /&gt;
 # blacklist i2c-bcm2708&lt;br /&gt;
&lt;br /&gt;
Load the kernel module&lt;br /&gt;
&lt;br /&gt;
 sudo modprobe i2c-bcm2708&lt;br /&gt;
&lt;br /&gt;
...You may need to reboot at this point.&lt;br /&gt;
&lt;br /&gt;
Check that it's there&lt;br /&gt;
&lt;br /&gt;
 pi@raspberrypi ~ $ sudo ls /dev/i2c-* -l&lt;br /&gt;
 crw------- 1 root root 89, 0 Oct 23 20:03 /dev/i2c-0&lt;br /&gt;
 crw------- 1 root root 89, 1 Oct 23 20:03 /dev/i2c-1&lt;br /&gt;
&lt;br /&gt;
==== Giving proper permissions to the i2c devices ====&lt;br /&gt;
&lt;br /&gt;
Here we modify our udev rules in order to modify the i2c device to be owned by root. In the usermod command replace &amp;quot;pi&amp;quot; with the username of your choice, if you so wish.&lt;br /&gt;
&lt;br /&gt;
 sudo groupadd i2c&lt;br /&gt;
 sudo usermod -aG i2c pi &lt;br /&gt;
 sudo echo 'KERNEL==&amp;quot;i2c-[0-9]*&amp;quot;, GROUP=&amp;quot;i2c&amp;quot;' &amp;gt;&amp;gt; /etc/udev/rules.d/10-local_i2c_group.rules&lt;br /&gt;
&lt;br /&gt;
== Setting up syslog ==&lt;br /&gt;
&lt;br /&gt;
The server process uses node-syslog to get the logging done, which in turn requires some setup on the syslogd on your system. Again note, if you're using a pre-configured distro, this will already be setup for you.&lt;br /&gt;
&lt;br /&gt;
In my example configuration in Pidora, we'll edit our syslog.conf&lt;br /&gt;
&lt;br /&gt;
 nano /etc/rsyslog.conf&lt;br /&gt;
&lt;br /&gt;
And we'll add these two lines:&lt;br /&gt;
&lt;br /&gt;
 # Save veeOP daemon messages to	veeop.log&lt;br /&gt;
 local5.*                                                /var/log/veeop.conf&lt;br /&gt;
&lt;br /&gt;
Then restart the daemon with&lt;br /&gt;
&lt;br /&gt;
 sudo service syslog restart&lt;br /&gt;
&lt;br /&gt;
You'll probably also want to rotate this log, go and edit instructions for syslog&lt;br /&gt;
&lt;br /&gt;
 nano /etc/logrotate.d/veeop&lt;br /&gt;
&lt;br /&gt;
And fill it with:&lt;br /&gt;
&lt;br /&gt;
 /var/log/veeop.log {&lt;br /&gt;
     missingok&lt;br /&gt;
     notifempty&lt;br /&gt;
     size 5M&lt;br /&gt;
     yearly&lt;br /&gt;
     create 0600 root root&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Doug</name></author>	</entry>

	<entry>
		<id>http://wiki.mapletaps.dougbtv.com/Frequently_Asked_Questions</id>
		<title>Frequently Asked Questions</title>
		<link rel="alternate" type="text/html" href="http://wiki.mapletaps.dougbtv.com/Frequently_Asked_Questions"/>
				<updated>2013-10-14T14:39:35Z</updated>
		
		<summary type="html">&lt;p&gt;Doug: Created page with &amp;quot;* '''What does the veeOP do?'''  : The veeOP's core functionality is to smoothly power down your Raspberry Pi while installed in your car/truck/boat -- based on the state of t...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''What does the veeOP do?'''&lt;br /&gt;
&lt;br /&gt;
: The veeOP's core functionality is to smoothly power down your Raspberry Pi while installed in your car/truck/boat -- based on the state of the ignition. It senses the state of the ignition and communicates with the Raspberry Pi letting it know that it's time to shutdown. That's it's main function, but, it's designed to be extended by you! So you can fit it into your application. This wiki here provides lots of information about how you can further extend it's functionality and get to doing &amp;quot;cooler stuff&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* '''No, but, what's it DO? Like, why do I want to do this?'''&lt;br /&gt;
&lt;br /&gt;
: The veeOP is really a platform for a Raspberry Pi &amp;quot;carputer&amp;quot; -- a computer you run in your car. People use carputers from everything to media centers, to ODB-II (on-board diagnostics) interfaces, to advanced GPS tracking devices. And everything in between. If you've ever had an idea of what you could make better in your car electronically -- there's a chance you can do it with a carputer.&lt;/div&gt;</summary>
		<author><name>Doug</name></author>	</entry>

	<entry>
		<id>http://wiki.mapletaps.dougbtv.com/User_Manual:Index</id>
		<title>User Manual:Index</title>
		<link rel="alternate" type="text/html" href="http://wiki.mapletaps.dougbtv.com/User_Manual:Index"/>
				<updated>2013-10-14T14:33:58Z</updated>
		
		<summary type="html">&lt;p&gt;Doug: Created page with &amp;quot;== First time setup ==  So! You just opened up your veeOP package. Let's fire 'er up and get up and running!  First things first, don't install it in your car yet. Let's test ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== First time setup ==&lt;br /&gt;
&lt;br /&gt;
So! You just opened up your veeOP package. Let's fire 'er up and get up and running!&lt;br /&gt;
&lt;br /&gt;
First things first, don't install it in your car yet. Let's test it at your desk first, and make sure everything is going well. This way, you don't have to put it in, take it out if things aren't going right, right off the bat.&lt;/div&gt;</summary>
		<author><name>Doug</name></author>	</entry>

	<entry>
		<id>http://wiki.mapletaps.dougbtv.com/Downloads</id>
		<title>Downloads</title>
		<link rel="alternate" type="text/html" href="http://wiki.mapletaps.dougbtv.com/Downloads"/>
				<updated>2013-10-11T18:02:57Z</updated>
		
		<summary type="html">&lt;p&gt;Doug: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Download Everything that you need to get your veeOP going with your Raspberry pi!&lt;br /&gt;
&lt;br /&gt;
== Pre-configured Distros ==&lt;br /&gt;
&lt;br /&gt;
Download the distro of your choice&lt;br /&gt;
&lt;br /&gt;
== veeOP REST API ==&lt;br /&gt;
&lt;br /&gt;
: ''Main Article:'' [[REST API]]&lt;br /&gt;
&lt;br /&gt;
[https://code.google.com/p/raspi-vop/ Available on Google Code]&lt;br /&gt;
&lt;br /&gt;
The veeOP REST API is written in Node.js, and like everything else about the veeOP is completely open source. &lt;br /&gt;
&lt;br /&gt;
But, interfacing with it is easy -- and easy enough to do almost any programming language. That's why we made it a RESTful API.&lt;br /&gt;
&lt;br /&gt;
== Arduino Code &amp;amp; I²C API ==&lt;br /&gt;
&lt;br /&gt;
: ''Main Article:'' [[I²C API]]&lt;br /&gt;
&lt;br /&gt;
[https://code.google.com/p/arduino-vop/ Available on Google Code]&lt;br /&gt;
&lt;br /&gt;
It's meant to be extensible! Available as an Arduino Library, it's easy to add functionality to the on-board Arduino compatible, and extend the functionality of your veeOP, and add custom electronics.&lt;/div&gt;</summary>
		<author><name>Doug</name></author>	</entry>

	<entry>
		<id>http://wiki.mapletaps.dougbtv.com/Application_Ideas</id>
		<title>Application Ideas</title>
		<link rel="alternate" type="text/html" href="http://wiki.mapletaps.dougbtv.com/Application_Ideas"/>
				<updated>2013-10-11T17:38:02Z</updated>
		
		<summary type="html">&lt;p&gt;Doug: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We've just finishing developing the core veeOP components, and next we'll continue creating integrated application for veeOP -- the application specific ideas that will bring Raspberry Pi to life in your vehicle.&lt;br /&gt;
&lt;br /&gt;
We're planning to flesh these out into entire kits you can purchase, or the instructions to complete these projects all on your own.&lt;br /&gt;
&lt;br /&gt;
== Media Center ==&lt;br /&gt;
&lt;br /&gt;
# Install your veeOP&lt;br /&gt;
# Add WiFi USB Dongle&lt;br /&gt;
# Add XBMC&lt;br /&gt;
# Write a script to detect your home WiFi.&lt;br /&gt;
# Add btsync to sync music from home music collection.&lt;br /&gt;
# Music syncs while parked on the street / in your garage.&lt;br /&gt;
# Add a script to turn off your raspberry pi only when the sync is complete.&lt;br /&gt;
# Use an XBMC remote application to play your always-in-sync music collection in your car&lt;br /&gt;
&lt;br /&gt;
== Mobile Web Applications ==&lt;br /&gt;
&lt;br /&gt;
# Install your veeOP&lt;br /&gt;
# Add WiFi USB Dongle&lt;br /&gt;
# Setup tethering with your phone&lt;br /&gt;
# Let your raspberry pi use the internet!&lt;br /&gt;
&lt;br /&gt;
== Pen Testing ==&lt;br /&gt;
&lt;br /&gt;
# Install your veeOP&lt;br /&gt;
# Add WiFi USB Dongle&lt;br /&gt;
# Use Kali linux&lt;br /&gt;
# Write scripts to pen test your wifi networks while your car is parked.&lt;br /&gt;
# Harden your networks against mobile attacks.&lt;br /&gt;
&lt;br /&gt;
== Advanced Dash Cam ==&lt;br /&gt;
&lt;br /&gt;
# Install your veeOP&lt;br /&gt;
# Add USB Video camera&lt;br /&gt;
# Add USB storage&lt;br /&gt;
# Make sweeter videos than the awesome russian dash cams!&lt;br /&gt;
&lt;br /&gt;
== OBD-II / CANBUS ==&lt;br /&gt;
&lt;br /&gt;
* Integrate your car's onboard diagnostics into an application which tracks your cars performance.&lt;br /&gt;
&lt;br /&gt;
== HUDs ==&lt;br /&gt;
&lt;br /&gt;
* Working on it!&lt;br /&gt;
&lt;br /&gt;
== Touch-screen interfaces ==&lt;br /&gt;
&lt;br /&gt;
* We'll get there!&lt;br /&gt;
&lt;br /&gt;
== GPS Applications ==&lt;br /&gt;
&lt;br /&gt;
* Track your every move.&lt;br /&gt;
&lt;br /&gt;
== GSM Additions ==&lt;br /&gt;
&lt;br /&gt;
* Use GSM + GPS to make your own &amp;quot;lo-jack&amp;quot; type device.&lt;/div&gt;</summary>
		<author><name>Doug</name></author>	</entry>

	<entry>
		<id>http://wiki.mapletaps.dougbtv.com/I%C2%B2C_API</id>
		<title>I²C API</title>
		<link rel="alternate" type="text/html" href="http://wiki.mapletaps.dougbtv.com/I%C2%B2C_API"/>
				<updated>2013-10-11T17:23:41Z</updated>
		
		<summary type="html">&lt;p&gt;Doug: Created page with &amp;quot; The I²C API on the microcontroller is a rather simple little set of commands that rides on I²C. For more information about [http://en.wikipedia.org/wiki/I%C2%B2C I²C we di...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The I²C API on the microcontroller is a rather simple little set of commands that rides on I²C. For more information about [http://en.wikipedia.org/wiki/I%C2%B2C I²C we direct you to Wikipedia].&lt;br /&gt;
&lt;br /&gt;
In practice, this is also abstracted by the veeOP REST API, which resides on the Raspberry Pi. The REST API is much more verbose, and provides more flexibility in handling the day-to-day tasks with your veeOP. But, should you see an opportunity to extend it's communication -- it's a simple system. Don't let all the bits and bytes confuse you here, when it comes down to it it's this simple:&lt;br /&gt;
&lt;br /&gt;
#Raspberry Pi says &amp;quot;Hi, microcontroller, I want you to do something.&amp;quot;&lt;br /&gt;
##...And sends it 4 bytes to tell it to do so.&lt;br /&gt;
#Microcontroller says &amp;quot;Sure! I did what you want, and here's some info about it.&amp;quot;&lt;br /&gt;
##...And it sends 4-bytes back to the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
The veeOP uses the Raspberry Pi as the I²C master, with the arduino-compatible being the slave, at address 4 (0x04) by default (this is configurable in the library.)&lt;br /&gt;
&lt;br /&gt;
== Download the code! ==&lt;br /&gt;
&lt;br /&gt;
If you're using one of the downloadable pre-customized distros, you can look in:&lt;br /&gt;
&lt;br /&gt;
 /home/pi/arduino-vop/src/&lt;br /&gt;
&lt;br /&gt;
For the source code. But, if you really want to dig in -- [https://code.google.com/p/arduino-vop/ download the code from google code].&lt;br /&gt;
&lt;br /&gt;
It's as simple as placing the vOP folder into your libraries folder in your Arduino's default install directory, to compile it. Check out the provided example sketch as it will guide you into extending the functionality. You can use the provided example sketch to keep the veeOP functionality intact, but! Use the microcontroller for other purposes, and it's extend it's functionality.&lt;br /&gt;
&lt;br /&gt;
== How Commands are transmitted ==&lt;br /&gt;
&lt;br /&gt;
Commands are sent to the veeOP arduino-compatible with a 4-byte tuple. It looks like so:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;(C,P_1,P_2,C_e)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where each element is a single byte, representing:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
    \begin{align}&lt;br /&gt;
      C &amp;amp; = \text{Command}                       \\&lt;br /&gt;
      P_1 &amp;amp; = \text{First Parameter}             \\&lt;br /&gt;
      P_2 &amp;amp; = \text{Second Parameter}            \\&lt;br /&gt;
      C_e &amp;amp; = \text{Command Ending (0x0A)} \\&lt;br /&gt;
    \end{align}&lt;br /&gt;
  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR /&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; (command) is any (known) value other than 10 (0x0A, in hex.) and originally assigned all higher 10.&lt;br /&gt;
* &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; &amp;amp; &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; are sometimes treated as individual integer values each, or together as a 16 bit integer, depending on context.&lt;br /&gt;
* &amp;lt;math&amp;gt;C_e&amp;lt;/math&amp;gt; Command ending allows the microcontroller know when a command is incomplete, or too many bytes are sent.&lt;br /&gt;
&amp;lt;BR /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Why's it end in 10? It's the &amp;quot;end of line&amp;quot; ASCII character, check it out [http://asciitable.com asciitable.com].&lt;br /&gt;
&lt;br /&gt;
== How responses are received ==&lt;br /&gt;
&lt;br /&gt;
When the microcontroller recieves the proper 4 bytes for the command, it responds in turn with a response of 4 bytes.&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;(E,C_r,R_1,R_2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where each element is a single byte, representing:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;&lt;br /&gt;
    \begin{align}&lt;br /&gt;
      E &amp;amp; = \text{Error Code}           \\&lt;br /&gt;
      C_r &amp;amp; = \text{Command return}     \\&lt;br /&gt;
      R_1 &amp;amp; = \text{First return byte}  \\&lt;br /&gt;
      R_2 &amp;amp; = \text{Second return byte} \\&lt;br /&gt;
    \end{align}&lt;br /&gt;
  &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR /&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; errors of a value of 0 denotes an error-free response, any non-zero value is defined in a table below.&lt;br /&gt;
* &amp;lt;math&amp;gt;C_r&amp;lt;/math&amp;gt; is a redundant byte that represents &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; from the sent command. This is used for error handling on the raspberry pi.&lt;br /&gt;
* &amp;lt;math&amp;gt;R_1&amp;lt;/math&amp;gt; &amp;amp; &amp;lt;math&amp;gt;R_2&amp;lt;/math&amp;gt; are the resulting responses from the command. Treated as two bytes, or a 16-bit unsigned integer depending on the context of the command.&lt;br /&gt;
&amp;lt;BR /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
&lt;br /&gt;
In this chart, we show each available command, and it's return type. The example commands and responses are given showing each 4-byte command and response, in decimal.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command Description !! Value !! &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; !! Returns !! Example Command (Decimal) !! Example Response (decimal) !! Example Description&lt;br /&gt;
|-&lt;br /&gt;
|Check Ignition State &lt;br /&gt;
| 11 &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &lt;br /&gt;
| Boolean&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;math&amp;gt;(11,0,0,10)&amp;lt;/math&amp;gt; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;math&amp;gt;(0,11,0,1)&amp;lt;/math&amp;gt;&lt;br /&gt;
| Response showing the ignition is on. An &amp;lt;math&amp;gt;R_2&amp;lt;/math&amp;gt; value of 1 denotes the ignition is on, where a value of 0 denotes it being off.&lt;br /&gt;
|-&lt;br /&gt;
|Last time ignition changed (seconds ago) &lt;br /&gt;
| 12&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &lt;br /&gt;
| 16-bit Integer&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;math&amp;gt;(12,0,0,10)&amp;lt;/math&amp;gt; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;math&amp;gt;(0,12,1,2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| Responds showing us the ignition last changed it's state 258 seconds ago. See 16-bit integer note, below.&lt;br /&gt;
|-&lt;br /&gt;
|Last time ignition changed (minutes ago) &lt;br /&gt;
| 13&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &lt;br /&gt;
| 16-bit Integer&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;math&amp;gt;(13,0,0,10)&amp;lt;/math&amp;gt; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;math&amp;gt;(0,13,0,90)&amp;lt;/math&amp;gt;&lt;br /&gt;
| Responds showing us the ignition last changed it's state 90 minutes ago&lt;br /&gt;
|-&lt;br /&gt;
|Pat the watchdog &lt;br /&gt;
| 15&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | - &lt;br /&gt;
| - &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;math&amp;gt;(15,0,0,10)&amp;lt;/math&amp;gt; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;math&amp;gt;(0,15,0,0)&amp;lt;/math&amp;gt;&lt;br /&gt;
| Responds simply stating it pat the watchdog without an error.&lt;br /&gt;
|-&lt;br /&gt;
|Echo bytes sent &lt;br /&gt;
| 14&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Byte &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Byte &lt;br /&gt;
| 2 Bytes &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;math&amp;gt;(14,1,2,10)&amp;lt;/math&amp;gt; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &amp;lt;math&amp;gt;(0,14,1,2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| Simply echos the sent bytes back. Returns &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; as &amp;lt;math&amp;gt;R_1&amp;lt;/math&amp;gt; and returns &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; as &amp;lt;math&amp;gt;R_2&amp;lt;/math&amp;gt;. Mainly useful as &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 16-bit Integer Example ===&lt;br /&gt;
&lt;br /&gt;
Using the &amp;quot;Last time ignition changed (seconds ago)&amp;quot; command example from above.&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;math&amp;gt;R_1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;R_2&amp;lt;/math&amp;gt; represent a 16 bit integer.In the response &amp;lt;math&amp;gt;(1,2)&amp;lt;/math&amp;gt; could be represented as bytes in hex as &amp;lt;math&amp;gt;\text{(0x01,0x02)}&amp;lt;/math&amp;gt;, which will convert as a little endian into a decimal value of &amp;lt;math&amp;gt;\text{0x102 hex = 258 dec}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Error Codes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &amp;lt;math&amp;gt;E&amp;lt;/math&amp;gt; value !! Code Constant !! Description&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1 || ERR_BUFFER_OVERFLOW || Too many bytes received before &amp;lt;math&amp;gt;C_e&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2 || ERR_COMMAND_UNKNOWN || Command is unknown.&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3 || ERR_COMMAND_INCOMPLETE || Request for data from master received before &amp;lt;math&amp;gt;C_e&amp;lt;/math&amp;gt; sent.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Doug</name></author>	</entry>

	<entry>
		<id>http://wiki.mapletaps.dougbtv.com/Microcontroller_And_Electronics</id>
		<title>Microcontroller And Electronics</title>
		<link rel="alternate" type="text/html" href="http://wiki.mapletaps.dougbtv.com/Microcontroller_And_Electronics"/>
				<updated>2013-10-09T15:34:13Z</updated>
		
		<summary type="html">&lt;p&gt;Doug: /* Re-programming the on-board Arduino Compatible */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Re-programming the on-board Arduino Compatible == &lt;br /&gt;
&lt;br /&gt;
The veeOP has an on-board arduino compatible, allowing you to customize it to the fullest extent.&lt;br /&gt;
&lt;br /&gt;
The tool included with the downloadable distros here is the [http://inotool.org/ InoTool, a command-line Arduino tool]. To get into the details, check out their [http://inotool.org/#installation installation guide], and their [http://inotool.org/quickstart quick-start guide]. But, we'll go over the details here, too.&lt;br /&gt;
&lt;br /&gt;
In the distros provided here in the home directory for the &amp;quot;pi&amp;quot; user, you'll find a directory named 'arduino-vop' which already has an editable version of the code that's already on the microcontroller that you can use to get started!&lt;br /&gt;
&lt;br /&gt;
[[Image:aon-jumper-web.png|thumb|225px|Location of the &amp;quot;always on&amp;quot; (A-ON) header/jumper on the veeOP. (Shown with jumper off)]]&lt;br /&gt;
&lt;br /&gt;
=== Hardware Steps ===&lt;br /&gt;
&lt;br /&gt;
One important step if you're going to re-program the microcontroller on the veeOP is to use a jumper on the &amp;quot;A-ON header&amp;quot; (short for &amp;quot;always on&amp;quot;). Because the veeOP controls power to the Raspberry Pi, when programming it -- you don't want the veeOP to turn off your Raspberry Pi. When a jumper is on this header, it makes it so that the Raspberry Pi is always in an on state. It's also imperative that you take the jumper off when you're ready to put the veeOP back in your vehicle, as it won't function the way it's intended! ...As you might imagine.&lt;br /&gt;
&lt;br /&gt;
Another option for programming the on-board arduino compatible microcontroller is to use the FTDI header on the board. This allows you to use an FTDI cable (which is basically a USB-to-RS232 adapter) to reprogram the microcontroller. Allowing you to program the micro without using the Raspberry Pi. However, since this also supplies the board with power, it's important that you do not have a micro USB cable attached, too.&lt;br /&gt;
&lt;br /&gt;
Your veeOP should come with jumpers provided. However, if you are to lose them, any standard jumper from a PC will also work. (Or you can wrap a wire around them, in a pinch.)&lt;br /&gt;
&lt;br /&gt;
=== Installing the necessary tools ===&lt;br /&gt;
&lt;br /&gt;
If you're not using a veeOP customized distro, you might wish to install the tools from scratch. The examples given here are from Raspbian, but, can be easily applied to most distros.&lt;br /&gt;
&lt;br /&gt;
First install Arduino and the requirements for inotools&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install arduino&lt;br /&gt;
 sudo apt-get install python-setuptools&lt;br /&gt;
 sudo apt-get install picocom&lt;br /&gt;
&lt;br /&gt;
Then install ino with easy_setup&lt;br /&gt;
&lt;br /&gt;
 sudo easy_install ino&lt;br /&gt;
&lt;br /&gt;
Add the pi user to the tty group&lt;br /&gt;
&lt;br /&gt;
 sudo usermod -a -G tty pi&lt;br /&gt;
&lt;br /&gt;
And make a symlink to the tty that inotool / arduino likes...&lt;br /&gt;
&lt;br /&gt;
 sudo ln -s /dev/ttyAMA0 /dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
And make sure it's writable &lt;br /&gt;
&lt;br /&gt;
 sudo chmod o+w /dev/ttyAMA0&lt;br /&gt;
&lt;br /&gt;
== Download the code! ==&lt;br /&gt;
&lt;br /&gt;
: ''Main Article:'' [[Downloads]]&lt;br /&gt;
&lt;br /&gt;
If you're using one of the downloadable pre-customized distros, you can look in:&lt;br /&gt;
&lt;br /&gt;
 /home/pi/arduino-vop/src/&lt;br /&gt;
&lt;br /&gt;
For the source code. But, if you really want to dig in -- [https://code.google.com/p/arduino-vop/ download the code from google code].&lt;br /&gt;
&lt;br /&gt;
It's as simple as placing the vOP folder into your libraries folder in your Arduino's default install directory, to compile it. Check out the provided example sketch as it will guide you into extending the functionality. You can use the provided example sketch to keep the veeOP functionality intact, but! Use the microcontroller for other purposes, and it's extend it's functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using Arduino Shields with your veeOP ==&lt;br /&gt;
&lt;br /&gt;
The veeOP is designed to be able to extend it using Arduino Shields. There are shields for all kinds of applications&lt;br /&gt;
&lt;br /&gt;
* GPSr (global position system recievers)&lt;br /&gt;
* GSM (cell phone service)&lt;br /&gt;
* LCD Displays&lt;br /&gt;
* Wireless (like the ZigBee / XBee)&lt;br /&gt;
* And much, much more.&lt;br /&gt;
&lt;br /&gt;
[[Image:VeeOP_v003.png|thumb|350px|The veeOP schematics as of v0.300]]&lt;br /&gt;
&lt;br /&gt;
== The Schematics ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
An extensible platform isn't exactly that without knowing how to really dig deep into the electronics. You can simply use the board &amp;quot;like an attached Arduino-compatible&amp;quot; -- or you can really get in and hack it how you want.&lt;br /&gt;
&lt;br /&gt;
Or! You can even build your own. We've included the schematic to show you that we really do care about the Open Source Hardware (OSHW) movement.&lt;br /&gt;
&lt;br /&gt;
== Are you new to Arduino? ==&lt;br /&gt;
&lt;br /&gt;
Don't sweat it! [http://arduino.cc/ The Arduino] is intended to be an approachable technology, and one that gives a new user a lot of power. And, you'll feel great interacting directly with microcontrollers. The best part is, you can use your veeOP to help you learn.&lt;br /&gt;
&lt;br /&gt;
You can log onto the veeOP connected to your raspberry pi, but, you might want to [http://arduino.cc/en/Main/Software download the Arduino IDE] (integrated development environment) and get started on your workstation (your laptop or desktop computer). You can compile the veeOP code right there to do some initial testing and exploration.&lt;br /&gt;
&lt;br /&gt;
Some resources you might be interested in:&lt;br /&gt;
&lt;br /&gt;
* [http://arduino.cc/en/Guide/HomePage Getting Started With Arduino]&lt;br /&gt;
* [http://arduino.cc/en/Main/Software Arduino Software Download]&lt;br /&gt;
* [http://oreilly.com/arduino/ O'Reilly Arduino Development Landing Page]&lt;br /&gt;
* [http://shop.oreilly.com/product/9780596802486.do The Arduino Cookbook]&lt;br /&gt;
&lt;br /&gt;
== The I²C API ==&lt;br /&gt;
&lt;br /&gt;
: ''Main Article:'' [[I²C API]]&lt;br /&gt;
&lt;br /&gt;
The I²C API on the microcontroller is a rather simple little set of commands that rides on I²C. For more information about [http://en.wikipedia.org/wiki/I%C2%B2C I²C we direct you to Wikipedia].&lt;br /&gt;
&lt;br /&gt;
In practice, this is also abstracted by the veeOP REST API, which resides on the Raspberry Pi. The REST API is much more verbose, and provides more flexibility in handling the day-to-day tasks with your veeOP. But, should you see an opportunity to extend it's communication -- it's a simple system. Don't let all the bits and bytes confuse you here, when it comes down to it it's this simple:&lt;br /&gt;
&lt;br /&gt;
#Raspberry Pi says &amp;quot;Hi, microcontroller, I want you to do something.&amp;quot;&lt;br /&gt;
##...And sends it 4 bytes to tell it to do so.&lt;br /&gt;
#Microcontroller says &amp;quot;Sure! I did what you want, and here's some info about it.&amp;quot;&lt;br /&gt;
##...And it sends 4-bytes back to the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
The veeOP uses the Raspberry Pi as the I²C master, with the arduino-compatible being the slave, at address 4 (0x04) by default (this is configurable in the library.)&lt;br /&gt;
&lt;br /&gt;
== Advanced Resources ==&lt;br /&gt;
&lt;br /&gt;
[[Image:dtr_on_logic.jpg|thumb|300px|Looking at the DTR and Serial RX/TX lines on a HP Logic Analyzer (from 1984!) on the ATMega while developing the veeOP]]&lt;br /&gt;
&lt;br /&gt;
Other resources that were valuable as the interface between the veeOP board and Raspberry Pi for programming the onboard arduino-compatible:&lt;br /&gt;
&lt;br /&gt;
* [http://openmicros.org/index.php/articles/94-ciseco-product-documentation/raspberry-pi/288-programming-an-arduino-from-your-raspberry-pi-with-ciseco-hardware Triggering microcontroller reset using Raspberry Pi's GPIO]&lt;br /&gt;
* [http://openmicros.org/index.php/articles/94-ciseco-product-documentation/raspberry-pi/283-setting-up-my-raspberry-pi Another approach to programming an arduino compatible using a Raspberry Pi]&lt;br /&gt;
* [http://www.deanmao.com/2012/08/12/fixing-the-dtr-pin/ Fixing the DTR Pin]&lt;br /&gt;
* [http://elinux.org/RPi_GPIO_Interface_Circuits#Level_Shifters Logic Level example schematics from eLinux]&lt;br /&gt;
* [http://elinux.org/RPi_Serial_Connection eLinux's Serial Connection article]&lt;br /&gt;
* [http://codeandlife.com/2012/07/29/arduino-and-raspberry-pi-serial-communication/ An article about connecting serial communications to the Arduino from the Raspberry Pi]&lt;/div&gt;</summary>
		<author><name>Doug</name></author>	</entry>

	<entry>
		<id>http://wiki.mapletaps.dougbtv.com/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.mapletaps.dougbtv.com/Main_Page"/>
				<updated>2013-10-03T15:09:25Z</updated>
		
		<summary type="html">&lt;p&gt;Doug: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''veeOP''' is the '''Raspberry Pi Vehicle Operating Platform'''.&lt;br /&gt;
&lt;br /&gt;
It's an extensible open source hardware (and software) platform, that enables you to use your Raspberry Pi in your vehicle. It's core function is to allow you to smoothly power on, and off the Raspberry Pi by the state of your vehicle's ignition. This helps with headless (no display) implementations, and is also convenient for implementations with a display (or even a touch-screen). It has the capability to communicate a command to the Raspberry Pi to say &amp;quot;Hi, the ignition is off, please let the veeOP know when you'd like to power down&amp;quot;. So that your implementation of a Raspberry Pi &amp;quot;carputer&amp;quot; can stay powered on when you need it to, and power it down when you don't -- say for example, if you're stopped at a gas station and need your ignition to be off, you don't have to reboot your Raspberry Pi&lt;br /&gt;
&lt;br /&gt;
The veeOP is &amp;quot;application agnostic&amp;quot;, that is, it gets you over the hurdle of the complexity of the power supply, and lets you get to the &amp;quot;good stuff&amp;quot; -- you know, like media center applications, GPS applications, or ''anything'' that you can imagine.&lt;br /&gt;
&lt;br /&gt;
But! It doesn't end there. It's based on an Arduino-compatible microcontroller that you can reprogram. And it has a RESTful API that allows you to extend it's core functionality. This wiki will guide you through the steps that you need to take full control of your veeOP.&lt;br /&gt;
&lt;br /&gt;
== Categories ==&lt;br /&gt;
{| width=100%&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| cellspacing=5 cellpadding=5 border=0 width=100%&lt;br /&gt;
|width=48|{{Click || image=Nuvola_apps_kdict.png | link=User_Manual:Index | width=48px | height=48px }}&lt;br /&gt;
|'''[[User_Manual:Index|User Manual]]'''&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;The veeOP User Manual&lt;br /&gt;
|width=48|{{Click || image=Nuvola_apps_ktip.png | link=Application Ideas | width=48px | height=48px }}&lt;br /&gt;
|'''[[Application Ideas]]'''&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;Ideas of what you can do with your Raspberry Pi carputer.&lt;br /&gt;
|-&lt;br /&gt;
|width=48|{{Click || image=Nuvola_apps_khelpcenter.png | link=Frequently Asked Questions | width=48px | height=48px }}&lt;br /&gt;
|'''[[Frequently Asked Questions]]'''&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;A collection of the questions and answers&lt;br /&gt;
|width=48|{{Click || image=Nuvola_apps_download_manager.png | link=Downloads | width=48px | height=48px }}&lt;br /&gt;
|'''[[Downloads]]'''&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;Download distros pre-loaded with all the veeOP software.&lt;br /&gt;
|-&lt;br /&gt;
|colspan=4|&amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|width=48|{{Click || image=Nuvola_apps_khexedit.png | link=REST API | width=48px | height=48px }}&lt;br /&gt;
|'''[[REST API]]'''&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;The ins-and-outs of the RESTful API&lt;br /&gt;
|width=48|{{Click || image=Nuvola_apps_kcmprocessor.png | link=Microcontroller And Electronics | width=48px | height=48px }}&lt;br /&gt;
|'''[[Microcontroller And Electronics]]'''&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;Wrangle in the power of the on-board Arduino-compatible microprocessor, and use it for your applications.&lt;br /&gt;
|-&lt;br /&gt;
|width=48|{{Click || image=Icon_tools.png | link=Vehicle Installation | width=48px | height=48px }}&lt;br /&gt;
|'''[[Vehicle Installation]]'''&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;Details on how to install the veeOP (and your Pi!) in your vehicle&lt;br /&gt;
|width=48|{{Click || image=Nuvola_apps_kpackage.png | link=I²C API | width=48px | height=48px }}&lt;br /&gt;
|'''[[I²C API]]'''&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;Get in depth with the microcontroller code, and it's I²C API&lt;br /&gt;
|-&lt;br /&gt;
|width=48|{{Click || image=Nuvola_apps_edu_science.png | link=Laboratory B | width=48px | height=48px }}&lt;br /&gt;
|'''[[Laboratory B]]'''&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;Come learn in person about veeOP at Laboratory B, the hackerspace in Burlington, Vermont USA&lt;br /&gt;
|}&lt;br /&gt;
| width=220 valign=top | {{Template:Featured_Articles}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== In progress notes... ==&lt;br /&gt;
&lt;br /&gt;
[http://commons.wikimedia.org/wiki/Category:Nuvola_icons Sweet Icons from wikimedia]&lt;br /&gt;
&lt;br /&gt;
'''MediaWiki has been successfully installed.'''&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.&lt;/div&gt;</summary>
		<author><name>MediaWiki default</name></author>	</entry>

	</feed>