Blog
Recent Posts
Developing SAE J1939 Applications with ARD1939 and Copperhill Technologies Hardware
Posted by on
One of the challenges of developing SAE J1939 applications is finding a protocol stack that is both affordable and flexible enough for prototyping, education, and custom embedded projects.
To address this need, we developed ARD1939, a portable C++ SAE J1939 protocol stack that serves as the software foundation for many of our development projects and examples.
Originally created for the Arduino Uno, ARD1939 has evolved into a portable implementation that supports Arduino, ESP32, and other embedded platforms. The software provides the core functionality required for building real-world SAE J1939 applications, including Network Management, Address Claiming, Transport Protocol (BAM and RTS/CTS), Request Messages, and PGN transmission and reception.
Unlike many protocol implementations that focus solely on demonstrating a few messages, ARD1939 was designed as a complete software framework for embedded development.
The protocol stack is currently available as a precompiled library, allowing developers to begin building and testing applications immediately. With the release of the upcoming book, “J1939 Development for Embedded Systems,” the complete C++ source code will also be released under an open-source license.
At Copperhill Technologies, we use ARD1939 together with many of our CAN Bus and SAE J1939 development products, including Arduino, ESP32, and Teensy-based hardware platforms. This combination allows engineers to move quickly from evaluating the protocol to developing fully functional embedded applications.
For complete information about the ARD1939 protocol stack, including its architecture, programming interface, supported hardware, and ongoing documentation, visit:
If you’re interested in learning the implementation details behind SAE J1939, be sure to read the complete article:
Questions, suggestions, or feedback? Join the growing J1939 engineering community at:
Whether you’re developing a prototype, building an ECU, or simply learning the SAE J1939 protocol, ARD1939 and the accompanying educational resources provide a practical starting point for your next embedded systems project.
CANPico V2 with Raspberry Pi Pico WH: Build Connected CAN Bus Applications with MicroPython and Wi-Fi
Have you ever wanted to build a smart system that sends data to the cloud, responds to remote commands, or monitors equipment in real time? With the CANPico V2 featuring a pre-installed Raspberry Pi Pico WH, those ideas can become working prototypes in hours instead of weeks. Combining industrial-grade CAN Bus hardware, integrated Wi-Fi, and the [...]
CAN Bus Troubleshooting with the PiCAN HATs: Why the Board Is Probably Not the Problem
The PiCAN product line has become the go-to CAN Bus interface solution for Raspberry Pi developers, system integrators, educators, and industrial engineers worldwide. From entry-level CAN Bus connectivity to advanced dual-channel CAN, CAN FD, GPS/GNSS integration, RS232, RS485, and real-time industrial networking, PiCAN boards combine robust hardware design with seamless Raspberry Pi integration. Whether you [...]
ESP32 TWAI Driver Explained: A Practical Guide to CAN Bus Programming
The ESP32 has become one of the most popular microcontrollers for CAN bus applications. Whether you are building industrial controllers, SAE J1939 devices, NMEA 2000 products, robotics systems, or automotive prototypes, the ESP32 provides a powerful and cost-effective platform with a built-in CAN controller. Yet, many developers are confused when they encounter the term TWAI in [...]
CAN Bus Prototyping With Arduino Uno - The MCP2515 Library
This post is part of a series about Controller Area Network (CAN Bus) Prototyping With the Arduino Uno.As with any serial networking controller, the essential functions are: InitializationRead DataWrite DataCheck StatusIn case of the MCP2515 library, these functions are represented by: Initialization: CAN0.beginRead Data: CAN0.readMsgBuf incl. CAN0.checkReceive, CAN0.getCanIdWrite Data: CAN0.sendMsgBufCheck Status: CAN0.checkErrorFunction CallsFunction: CAN0.beginPurpose: Initializes the CAN controller and [...]
CAN Bus Prototyping With Arduino Uno - Arduino CAN Shields
This post is part of a series about Controller Area Network (CAN Bus) Prototyping With the Arduino Uno. Since Controller Area Network (CAN) is predominantly targeted at industrial solutions (versus the vastly more popular USB for non-industrial use such as home and lab), there aren’t too many choices available in the market. Through some research (i.e. browsing) I found two very similar [...]
A Brief Introduction to the ARM Cortex M3 Processor
This post is part of a series on CAN Bus and SAE J1939 Prototyping with the ARM Cortex M3 processor. The ARM Cortex-M is a group of 32-bit RISC ARM processor cores licensed by ARM Holdings. The cores are intended for microcontroller use, and consist of the Cortex-M0, M0+, M1, M3, M4, and M7. The ARM Cortex-M3 processor is very [...]
Loading... Please wait...
