PJON项目安装与配置指南
概述
PJON(Padded Jittering Operative Network)是一个实验性的、Arduino兼容的、多主站、多媒体的软件定义网络协议。它可以在多种微控制器和实时操作系统上轻松交叉编译,包括ATtiny、ATmega、SAMD、ESP8266、ESP32、STM32、Teensy、Raspberry Pi、Zephyr、Linux、Windows x86、Apple和Android等平台。
本文将为您提供完整的PJON项目安装与配置指南,帮助您快速上手这一强大的物联网通信协议。
环境准备
支持的平台
PJON支持广泛的硬件平台:
| 平台类型 | 具体型号 |
|---|---|
| 微控制器 | ATtiny, ATmega, SAMD, ESP8266, ESP32, STM32, Teensy |
| 单板计算机 | Raspberry Pi |
| 操作系统 | Linux, Windows x86, Zephyr, Apple, Android |
开发工具要求
- Arduino IDE 1.8.x 或更高版本
- PlatformIO(可选)
- 对应平台的开发工具链
安装方法
方法一:通过Arduino库管理器安装
- 打开Arduino IDE
- 点击菜单:工具 → 管理库...
- 在搜索框中输入"PJON"
- 找到PJON库并点击"安装"
方法二:手动安装
- 下载PJON库文件
- 将库文件解压到Arduino的libraries目录:
- Windows:
Documents\Arduino\libraries\ - macOS:
~/Documents/Arduino/libraries/ - Linux:
~/Arduino/libraries/
- Windows:
- 重启Arduino IDE
方法三:Git克隆安装
cd ~/Arduino/libraries/
git clone https://gitcode.com/gh_mirrors/pj/PJON.git
项目结构
PJON项目采用模块化设计,主要包含以下核心组件:
基本配置
缓冲区配置
在包含库之前,可以定义缓冲区大小:
#define PJON_MAX_PACKETS 1
#define PJON_PACKET_MAX_LENGTH 20
#include <PJONSoftwareBitBang.h>
策略选择
PJON支持多种通信策略,根据需求选择合适的策略:
| 策略 | 物理层 | 协议 | 包含头文件 |
|---|---|---|---|
| SoftwareBitBang | 单线 | PJDL | #include <PJONSoftwareBitBang.h> |
| AnalogSampling | 光脉冲 | PJDLS | #include <PJONAnalogSampling.h> |
| OverSampling | 无线电 | PJDLR | #include <PJONOverSampling.h> |
| ThroughSerial | 串口 | TSDL | #include <PJONThroughSerial.h> |
| ThroughLoRa | LoRa无线电 | LoRa | #include <PJONThroughLora.h> |
| EthernetTCP | 以太网/WiFi | TCP | #include <PJONEthernetTCP.h> |
| GlobalUDP | 以太网/WiFi | UDP | #include <PJONGlobalUDP.h> |
| ESPNOW | WiFi | ESPNOW | #include <PJONESPNOW.h> |
硬件配置示例
单线通信配置(SoftwareBitBang)
#include <PJONSoftwareBitBang.h>
// 创建总线实例,设备ID为45
PJONSoftwareBitBang bus(45);
void setup() {
// 设置通信引脚为12
bus.strategy.set_pin(12);
// 初始化总线
bus.begin();
// 每秒向设备44发送字符'B'
bus.send_repeatedly(44, "B", 1, 1000000);
}
void loop() {
bus.update();
}
接收端配置
#include <PJONSoftwareBitBang.h>
PJONSoftwareBitBang bus(44);
// 接收处理函数
void receiver_function(uint8_t *payload, uint16_t length,
const PJON_Packet_Info &packet_info) {
if(payload[0] == 'B') {
Serial.println("BLINK");
digitalWrite(LED_BUILTIN, HIGH);
delay(30);
digitalWrite(LED_BUILTIN, LOW);
}
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
bus.strategy.set_pin(12);
bus.begin();
bus.set_receiver(receiver_function);
Serial.begin(9600);
}
void loop() {
bus.receive(1000);
}
高级配置选项
网络模式配置
// 切换到共享网络模式
bus.set_shared_network(true);
// 设置通信模式(半双工或单工)
bus.set_communication_mode(PJON_HALF_DUPLEX);
bus.set_communication_mode(PJON_SIMPLEX);
错误检测配置
// 启用CRC32错误检测(更高可靠性)
bus.set_crc_32(true);
// 配置随机种子引脚
bus.set_random_seed(A1);
数据包配置
// 启用数据包ID功能
#define PJON_INCLUDE_PACKET_ID
#define PJON_MAX_RECENT_PACKET_IDS 10
#include <PJONSoftwareBitBang.h>
bus.set_packet_id(true);
// 启用网络服务标识
#define PJON_INCLUDE_PORT
#include <PJONSoftwareBitBang.h>
bus.include_port(8001);
// 启用硬件标识
#define PJON_INCLUDE_MAC
#include <PJONSoftwareBitBang.h>
uint8_t mac[6] = {0, 0, 0, 0, 0, 0};
PJONSoftwareBitBang bus(mac);
bus.include_mac(true);
多策略配置
PJON支持在同一程序中同时使用多个策略:
#include <PJONSoftwareBitBang.h>
#include <PJONEthernetTCP.h>
// 创建两个使用不同策略的总线实例
PJONSoftwareBitBang wiredBus;
PJONEthernetTCP tcpBus;
void setup() {
// 配置有线总线
wiredBus.strategy.set_pin(12);
wiredBus.begin();
// 配置TCP总线
tcpBus.strategy.set_port(1234);
tcpBus.begin();
}
平台特定配置
ESP32 ESPNOW配置
#include <PJONESPNOW.h>
PJONESPNOW bus(44);
void setup() {
bus.begin();
bus.send_repeatedly(45, "Hello ESP-NOW!", 14, 1000000);
}
void loop() {
bus.update();
bus.receive();
}
Raspberry Pi串口配置
#include <PJONThroughSerial.h>
PJONThroughSerial bus(44);
void setup() {
Serial.begin(9600);
bus.strategy.set_serial(&Serial);
bus.begin();
}
void loop() {
bus.update();
bus.receive(1000);
}
故障排除
常见问题及解决方案
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 编译错误 | 库路径错误 | 检查库安装位置,重启IDE |
| 通信失败 | 引脚配置错误 | 确认物理连接和引脚设置 |
| 数据包丢失 | 缓冲区大小不足 | 增加PJON_MAX_PACKETS值 |
| 性能问题 | 策略选择不当 | 根据距离和环境选择合适的策略 |
调试技巧
- 启用串口调试:使用Serial输出调试信息
- 检查返回值:所有发送方法都返回操作状态
- 使用错误处理:设置错误回调函数监控通信状态
- 验证硬件连接:确保物理连接正确可靠
性能优化建议
内存优化
// 最小化内存占用配置
#define PJON_MAX_PACKETS 1
#define PJON_PACKET_MAX_LENGTH 16
// 禁用可选功能节省内存
// #define PJON_INCLUDE_PACKET_ID
// #define PJON_INCLUDE_PORT
// #define PJON_INCLUDE_MAC
速度优化
// 根据需求调整超时参数
bus.set_acknowledge_timeout(5000); // 5秒确认超时
bus.set_response_timeout(10000); // 10秒响应超时
安全注意事项
⚠️ 重要安全警告:
- 电气安全:连接AC电源时务必小心,避免触电风险
- 眼睛保护:使用AnalogSampling策略时佩戴安全眼镜
- 法规遵守:无线电通信需符合当地法律法规
- 网络安全:连接到互联网的设备可能被远程控制
总结
PJON提供了一个强大而灵活的物联网通信解决方案,支持多种硬件平台和通信介质。通过本文的安装与配置指南,您应该能够:
- ✅ 正确安装PJON库到开发环境
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



