{"id":14,"date":"2015-09-22T05:36:33","date_gmt":"2015-09-22T05:36:33","guid":{"rendered":"http:\/\/projects.gonzos.net\/?page_id=14"},"modified":"2025-07-27T22:19:53","modified_gmt":"2025-07-27T12:19:53","slug":"ctx-obd","status":"publish","type":"page","link":"https:\/\/gonzos.net\/projects\/ctx-obd\/","title":{"rendered":"CTX-OBD"},"content":{"rendered":"<h1 style=\"text-align: center;\">Using a Raspberry-Pi to extract information from a Honda CTX-700 ECU.<\/h1>\n<p class=\"western\" align=\"right\">Updated November 2019<\/p>\n<p style=\"text-align: left;\" align=\"right\">This project was completed in Feb 2016 and was operational until I sold the bike in Nov 2019. The system is no longer in operation.<\/p>\n<p class=\"western\" style=\"text-align: center;\" align=\"right\">Here is the Raspberry-Pi mounted on the bike:<\/p>\n<p class=\"western\"><a href=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-box-on-bike.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-147\" src=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-box-on-bike.png\" alt=\"CTX box on bike\" width=\"600\" height=\"441\" srcset=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-box-on-bike.png 400w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-box-on-bike-300x221.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p class=\"western\" style=\"text-align: center;\">The data is shown on a character display on the dash. It contains\u00a0the following information:<\/p>\n<p class=\"western\" style=\"text-align: center;\">Top row: gear position, coolant temp, instantaneous fuel economy (km\/litre), fuel in tank<br \/>\nBottom row: % of chain oiler cycle time, average fuel economy, km to empty.<\/p>\n<p class=\"western\" style=\"text-align: center;\"><a href=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-character-display.jpg\" rel=\"attachment wp-att-278\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-278\" src=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-character-display.jpg\" alt=\"CTX-character-display\" width=\"665\" height=\"499\" srcset=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-character-display.jpg 800w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-character-display-300x225.jpg 300w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-character-display-768x576.jpg 768w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-character-display-730x548.jpg 730w\" sizes=\"auto, (max-width: 665px) 100vw, 665px\" \/><\/a><\/p>\n<p class=\"western\" style=\"text-align: center;\">There is a detailed web interface that can be accessed via a smartphone:<\/p>\n<p class=\"western\" style=\"text-align: center;\"><a href=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-screen.png\" rel=\"attachment wp-att-157\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-157 size-medium\" src=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-screen-300x176.png\" alt=\"CTX screen\" width=\"300\" height=\"176\" srcset=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-screen-300x176.png 300w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-screen-730x427.png 730w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-screen.png 800w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p class=\"western\">This document was written to help others to build a system to communicate with the ECU on Honda motorcycles. The vast majority of information here has been obtained from contributors on the pgmfi.org forum. That forum has been \u201cdown\u201d for months, so the information is not accessible. Hence this document. Note: Feb 2016 &#8211; pgmfi.org is back up!<\/p>\n<p class=\"western\">The key steps to extract information from the ECU are:<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">Make a cable to connect to the ECU diagnostics socket<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">Make an interface board to isolate the 12V bike signals from the 5V computer comms<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">Set up serial communications at 10400baud. This is a non-standard baud rate, so you can&#8217;t use a normal USB to serial adapter, and you can&#8217;t use a standard automotive ELM327-based unit because the ELM unit calculates the checksum differently and adds it automatically whether you want it to or not.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">Use the correct message protocol. Honda does not use the standard ISO-9141-2 protocol.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">Use the correct initialisation sequence. Honda does not use the standard ISO initialisation sequence (another reason not to use an ELM unit)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">Determine where the data you are looking for is located in the ECU memory. There are a few standard locations, but you may have to proceed to step 7 to test other locations if the standard ones don&#8217;t work.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">Write a program for your computer\/Arduino\/whatever to get the data and do with it what you will.<\/li>\n<li class=\"western\">Package it all into something that fits on your bike.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>My setup was based on a Raspberry-Pi model B+ with a PiFace2 I\/O board running Raspian. I used a PiFace board because I wanted I\/O for driving various things on the bike eg: an auto chain oiler. However, I also used it for pulling the K-line low (see section 5 below). You could use some other method for this function, but it was convenient for me to use one of the PiFace&#8217;s relays.<\/p>\n<p class=\"western\">The information flows in my system are quite complex:<\/p>\n<p class=\"western\"><a href=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-OBD-Functional-Diagram.png\" rel=\"attachment wp-att-281\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-281 aligncenter\" src=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-OBD-Functional-Diagram.png\" alt=\"CTX-OBD-Functional-Diagram\" width=\"800\" height=\"565\" srcset=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-OBD-Functional-Diagram.png 1158w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-OBD-Functional-Diagram-300x212.png 300w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-OBD-Functional-Diagram-768x543.png 768w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-OBD-Functional-Diagram-1024x723.png 1024w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-OBD-Functional-Diagram-730x516.png 730w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p class=\"western\">Going through these items one by one:<\/p>\n<h2 class=\"western\">1. Make a cable<\/h2>\n<p class=\"western\">You need to locate the socket on your bike. The CTX socket is a red 4-pin unit near the battery. The connections are 12V, earth, bi-directional K-line and a reset line. You need only the first three to talk to the ECU. Check your manual for the wire colours. The CTX uses a Sumitomo HM090 connector. The connector on the bike looks like this:<\/p>\n<p class=\"western\"><a href=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-obdplug.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-121 aligncenter\" src=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-obdplug-269x300.png\" alt=\"CTX obdplug\" width=\"269\" height=\"300\" srcset=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-obdplug-269x300.png 269w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-obdplug.png 400w\" sizes=\"auto, (max-width: 269px) 100vw, 269px\" \/><\/a><\/p>\n<h2 class=\"western\">2. Make an Interface Board<\/h2>\n<p class=\"western\">I made the following board:<\/p>\n<p class=\"western\"><a href=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2017\/04\/CTX-kline-interface.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-484\" src=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2017\/04\/CTX-kline-interface-300x151.png\" alt=\"\" width=\"800\" height=\"402\" srcset=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2017\/04\/CTX-kline-interface-300x151.png 300w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2017\/04\/CTX-kline-interface-768x386.png 768w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2017\/04\/CTX-kline-interface-1024x514.png 1024w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2017\/04\/CTX-kline-interface-730x367.png 730w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2017\/04\/CTX-kline-interface.png 1089w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p class=\"western\">The K-line rides high (12V) at rest.<\/p>\n<p class=\"western\">I used the above design incorporating optocouplers so that the bike12V was completely isolated from the computer serial adapter. It is possible to use other transistor-based circuits, but you don&#8217;t get the same level of isolation.<\/p>\n<h2 class=\"western\">3. Set up Serial Comms<\/h2>\n<p class=\"western\">I used a FT232RL USB to serial converter, because it has a base frequency which is able to be scaled down to the 10400baud needed. When plugged into the USB port on the Rpi, it comes up as \/dev\/ttyUSB0.<\/p>\n<p class=\"western\">To configure the port for 10400baud:<\/p>\n<p class=\"western\">\n<table id=\"tablepress-10\" class=\"tablepress tablepress-id-10\">\n<tbody>\n<tr class=\"row-1\">\n\t<td class=\"column-1\">#!\/bin\/bash <br \/>\nsetserial -v \/dev\/ttyUSB0 spd_cust divisor 2307<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-10 from cache --><\/p>\n<p class=\"western\">This sets the port so that, when you use a program (eg Python) to specify 38400baud for the port, it goes to the custom speed instead of 38400. The port settings are 8 bits, no parity, one stop bit.<\/p>\n<p class=\"western\">To get the adapter to work properly on a R-Pi, you need to add the following in the <em>\/boot\/cmdline.txt<\/em> file :<\/p>\n<p class=\"western\"><code class=\"western\">dwc_otg.speed=1<\/code><\/p>\n<h2 class=\"western\">4. Use the Correct Message Protocol<\/h2>\n<p class=\"western\">Basically the ECU simply responds to requests for information. It doesn&#8217;t care if the response is not heard.<\/p>\n<p class=\"western\">A typical request is of the form:<\/p>\n<p class=\"western\">72 07 72 11 00 14 F0 (in hexadecimal)<\/p>\n<p class=\"western\">72: the destination code (I think?)<\/p>\n<p class=\"western\">07: the number of characters in the message including the checksum<\/p>\n<p class=\"western\">72: the type of query (\u201cgive me data from memory?\u201d)<\/p>\n<p class=\"western\">11: the data table number<\/p>\n<p class=\"western\">00: the starting register within data table 11<\/p>\n<p class=\"western\">14: the finishing register within data table 11<\/p>\n<p class=\"western\">F0: the checksum<\/p>\n<p class=\"western\">The ECU will respond with a similar format:<\/p>\n<p class=\"western\">02 1A 72 11 00 XX XX XX &#8230;XX YY<\/p>\n<p class=\"western\">02: the destination code (I think?)<\/p>\n<p class=\"western\">1A: the number of characters in the message (in this case 26 decimal)<\/p>\n<p class=\"western\">72: the type of query (\u201cdata from memory?\u201d)<\/p>\n<p class=\"western\">11: the data table number<\/p>\n<p class=\"western\">00: the starting register<\/p>\n<p class=\"western\">XX: the data<\/p>\n<p class=\"western\">YY: the checksum<\/p>\n<p class=\"western\">The checksum is calculated differently to the ISO OBDII protocol. It goes like this:<\/p>\n<p class=\"western\">Sum all the values of the characters together, and take that value from 100 (hex). If the sum is greater than 100 hex, just use the last two characters (in hex).<\/p>\n<p class=\"western\">So, the request message above (in hex) would be:<\/p>\n<p class=\"western\">0x72 + 0x07 + 0x72 + 0x11 + 0x00 + 0x14 = 0x110<\/p>\n<p class=\"western\">Use only the last two characters, 0x10<\/p>\n<p class=\"western\">0x100 \u2013 0x10 = 0xF0 = the checksum F0<\/p>\n<p class=\"western\">The response checksum is calculated similarly.<\/p>\n<p class=\"western\">There are other query types (the third character in the request sequence). The ones I know to exist are 71, 72, 73 and 74. Code 71 requests all of the table data, rather than a subset:<\/p>\n<p class=\"western\">72 05 71 00 18 requests all of the data in table 00<\/p>\n<p class=\"western\">I don&#8217;t know what a code 73 or 74 request does.<\/p>\n<h2 class=\"western\">5. Use the correct Initialisation Sequence<\/h2>\n<p class=\"western\">The ECU will not respond until it has received the correct initialisation sequence. I used this:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">Pull the K-line low for 70msec<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">Return the K-line to the high state for 120msec<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">Send \u201cWakeup\u201d message: FE 04 FF FF. No response is expected<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">Wait 200msec<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">Send \u201cInitialise\u201d message: 72 05 00 F0 99<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">The ECU should respond with: 02 04 00 FA<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>That&#8217;s it. You can then send requests and the ECU should respond with the data requested. The communications needs to be \u201ckept alive\u201d, however. That means that if the ECU hasn&#8217;t received a request within a certain time it goes back to sleep and needs to be initialised again. I think the time is around 3 sec.<\/p>\n<p class=\"western\">Note that I haven&#8217;t tested the above times to see what the limits are. All I know is that they work for me and my system.<\/p>\n<p class=\"western\">How do you pull the K-line low? I used a relay driven by the R-Pi. It simply shorted the K-line and ground terminals on the interface board. It doesn&#8217;t have to be a relay. If you&#8217;re using a \u201csoft serial\u201d where you can directly control the Tx line, you can simply pull that low, and the interface board will pull the K-line low.<\/p>\n<h2 class=\"western\">6. Determine where the data is located<\/h2>\n<p class=\"western\">I tabulated the information obtained from a few guys working on this project at pgmfi.org . The data for the small selection of bikes shows that the critical information is held in only a few data table, and some of these tables are duplicated (don&#8217;t know why). The most frequently used tables are 00, 10 and 60, 11 and 61, so those the re best places to start. Refer to the \u201cHonda Data Tables.pdf\u201d document:<\/p>\n<p class=\"western\"><a href=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/Honda-data-tables.pdf\">Honda-data-tables<\/a><\/p>\n<p class=\"western\">The document shows the contents of the various tables on the bikes tested, and it shows how to calculate the real life data from the values that come from the ECU. The data comes in single or double bytes \u2013 double bytes are used for data that needs more precision or has a high value (eg: engine speed)<\/p>\n<p class=\"western\">If these data tables don&#8217;t work for you, you&#8217;ll have to write a program to \u201cscan\u201d through the various table numbers to see where the data exists. The ECU will simply reflect your query back at you if the table doesn&#8217;t exist.<\/p>\n<h2 class=\"western\">7. Write a program<\/h2>\n<p class=\"western\">Writing a program is up to you. I used Python running under Raspbian. You need a program that handles serial comms (obviously). You will have to be able to handle the following:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">Initialisation<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">sending\/receiving data normally<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">determining if the received data is valid (checksum)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">handling comms errors (the bike is an electrically noisy place)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">keeping the ECU awake, and waking it if it goes to sleep<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p class=\"western\">Receiving data is tricky. Because all the comms come on one line, the serial adapter receives all the data it sends, as well as the responses from the ECU. In addition, the ECU doesn&#8217;t necessarily respond immediately \u2013 it may be busy doing something else, so you have to wait until you have received the full response. In addition, the program has to ignore anything that comes back from the initialisation sequence.<\/p>\n<p class=\"western\">I used the following process:<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">clear send buffer<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">send message<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">clear receive buffer<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">loop through a single character receive program until a response of the required length has been received (I know how long the response should be)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">if no new characters are received within x cycles, exit the loop<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">determine if the message is valid \u2013 if not, don&#8217;t process, and try sending again. If a valid message is not received in x tries, reinitialise the comms.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">process the valid response<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2 class=\"western\">8. Package it<\/h2>\n<p class=\"western\">This is what I did \u2013 it may give you ideas. The R-Pi controls the following:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">The OBD communication<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">The auto chain oiler solenoid<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">The fuel tank level reporting<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li class=\"western\">The web server which provides the user interface<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p class=\"western\">My R-Pi was set up as a wireless hotspot so the user interface (an old Medion smartphone) could be used without wires. In addition, it means that any program changes can be done without connecting a keyboard and monitor to the computer.<\/p>\n<p class=\"western\">Here&#8217;s the assembly on the test bench:<\/p>\n<p class=\"western\"><a href=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-test-bench.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-125 size-full aligncenter\" src=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-test-bench.jpg\" alt=\"CTX test bench\" width=\"800\" height=\"600\" srcset=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-test-bench.jpg 800w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-test-bench-300x225.jpg 300w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2015\/09\/CTX-test-bench-730x548.jpg 730w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p class=\"western\">Here&#8217;s the wiring diagram:<\/p>\n<p class=\"western\" style=\"text-align: center;\"><a href=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-OBD-Wiring-Diagram.png\" rel=\"attachment wp-att-280\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-280\" src=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-OBD-Wiring-Diagram-1024x609.png\" alt=\"CTX-OBD-Wiring-Diagram\" width=\"1024\" height=\"609\" srcset=\"https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-OBD-Wiring-Diagram-1024x609.png 1024w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-OBD-Wiring-Diagram-300x179.png 300w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-OBD-Wiring-Diagram-768x457.png 768w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-OBD-Wiring-Diagram-730x434.png 730w, https:\/\/gonzos.net\/projects\/wp-content\/uploads\/2016\/02\/CTX-OBD-Wiring-Diagram.png 1492w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Using a Raspberry-Pi to extract information from a Honda CTX-700 ECU. Updated November 2019 This project was completed in Feb 2016 and was operational until I sold the bike in Nov 2019. The system is no longer in operation. Here is the Raspberry-Pi mounted on the bike: The data is shown on a character display [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-14","page","type-page","status-publish","hentry"],"blocksy_meta":{"page_structure_type":"type-3","styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":6},"has_hero_section":"disabled"},"_links":{"self":[{"href":"https:\/\/gonzos.net\/projects\/wp-json\/wp\/v2\/pages\/14","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gonzos.net\/projects\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gonzos.net\/projects\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gonzos.net\/projects\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gonzos.net\/projects\/wp-json\/wp\/v2\/comments?post=14"}],"version-history":[{"count":1,"href":"https:\/\/gonzos.net\/projects\/wp-json\/wp\/v2\/pages\/14\/revisions"}],"predecessor-version":[{"id":945,"href":"https:\/\/gonzos.net\/projects\/wp-json\/wp\/v2\/pages\/14\/revisions\/945"}],"wp:attachment":[{"href":"https:\/\/gonzos.net\/projects\/wp-json\/wp\/v2\/media?parent=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}