
J1939 Development for Embedded Systems is a practical guide for engineers and embedded developers who want to build real-world SAE J1939 applications. Covering Arduino, ESP32, Teensy, and other embedded platforms, the book focuses on implementation rather than theory, using the open-source ARD1939 protocol stack and complete programming examples to demonstrate every concept.
Unlike traditional J1939 references, this book approaches the protocol from a programmer’s perspective. Instead of following the structure of the SAE standards, it concentrates on the concepts you actually need to begin developing embedded applications. While a solid understanding of PGNs and message handling is essential, many lower-level protocol details are already managed by a complete J1939 protocol stack. The goal is to help you become productive quickly without requiring you to master every aspect of the protocol before writing your first line of code.
This book was inspired by years of feedback from readers of my Comprehensible Guide to J1939. Many engineers shared the same experience I had when first learning the protocol: spending countless hours navigating multiple standard documents, deciphering abbreviations, and trying to piece together information scattered across the specification. The SAE documents are excellent technical specifications, but they were never intended to serve as a step-by-step programming guide. This book fills that gap by presenting J1939 in a logical, implementation-oriented sequence that mirrors the way embedded software is actually developed.
Another major difference is that this book goes beyond explanation. Every programming example is based on the open-source ARD1939 protocol stack, allowing you to study and modify real source code instead of isolated code snippets. By the time you finish the book, you will not only understand how SAE J1939 works—you will also have a practical software foundation that you can use in your own projects.
This is a work in progress and will continue to evolve as new chapters, code examples, technical articles, and software updates are completed. A preliminary table of contents is already available, and additional resources will be published regularly as development progresses.
Join the J1939 Community
Become part of the J1939 community on our website, where you’ll find project updates, technical discussions, programming tips, code examples, and opportunities to exchange ideas with fellow developers.
Preliminary Table of Contents
Part I A Brief Introduction to J1939
Chapter 1 What Is J1939 and Why Should You Care?
Chapter 2 PGNs: The Language of J1939
Chapter 3 Understanding the 29-Bit Identifier
Chapter 4 Monitoring J1939 Traffic
Chapter 5 Requesting Data
Chapter 6 Transmitting J1939 Messages
Chapter 7 Source Addresses and Address Claiming
Chapter 8 Transport Protocol: When Eight Bytes Are Not Enough
Chapter 9 Diagnostic Messages: Understanding Vehicle Faults
Part II The J1939 Developer’s Toolbox
Chapter 10 Finding Information: J1939 Standards and References
Why You Need a Reference
J1939/71 – Vehicle Application Layer
Digital Annex (DA)
Other Useful Standards
Chapter 11 Monitoring J1939 Data
Why Monitoring Matters
Typical Workflow
Recommended Features
Chapter 12 CAN Analyzers and Bus Monitors
J1939 Runs on CAN
What a CAN Analyzer Shows
When a CAN Analyzer Is Needed
J1939 Monitor vs CAN Analyzer
Chapter 13 Building a Test Network
Why You Need a Network
Minimum Network
Recommended Development Setup
Real Vehicle vs Bench Network
Chapter 14 Your First Development Environment
Part III Getting Ready to Program
Chapter 15 Choosing Your Hardware
Chapter 16 Installing the Arduino IDE
Chapter 17 CAN Hardware Essentials
Chapter 18 Connecting Everything Together
Chapter 19 Exploring Live Network Traffic
Chapter 20 Meet ARD1939
Why Use a Protocol Stack?
What ARD1939 Does
What ARD1939 Does Not Do
Supported Platforms
Installing ARD1939
Your First ARD1939 Program
Part IV – Writing J1939 Software
Chapter 21 Inside a J1939 Application
Chapter 22 Understanding the ARD1939 Architecture
Chapter 23 Receiving Messages
Chapter 24 Transmitting Messages
Chapter 25 Decoding PGNs and SPNs
Chapter 26 Building Your First ECU
