【OpenEVSE 】汽车充电桩控制项目解析

news/2024/5/6 10:47:25/文章来源:https://blog.csdn.net/qq_39217004/article/details/128017718

【OpenEVSE 】汽车充电桩控制项目解析

    • 1. 项目介绍
    • 2. 项目硬件
    • 3. 软件原理以及流程
    • 4. 系统结构:
      • ESP32
      • RAPI API
      • MQTT 上的 RAPI:
    • 5. SAE J1772协议简析:
    • 6. 专用充电接插件
    • 7 . 源码解析:

此项目来源于openEnergyMonitor 的 openEVSE 部分,结合开源的软硬件系统,整理内容如下。

1. 项目介绍

社区博客介绍的比较详细: https://blog.openenergymonitor.org/2017/01/openevse-build/

Open EVSE是一种开放的硬件EVSE,允许人们构建自己的EVSE

EVSE : 是电动汽车供电设备的缩写,通常指的是充电桩。科普博文

RAPI:remote api ,表示远程API,允许远程硬件控制 openevse 使用串行端口的板,板上有FTDI/UART引脚。根据openevse源代码(open_evse.h),默认波特率为115200。

2. 项目硬件

硬件介绍:EVSE_PLUS-5.5
在这里插入图片描述
在这里插入图片描述
控制器的2大主要部分:高压大电流继电器低压控制电子设备 。主要芯片为微控制器(ATmega328p),更多细节,参考 这里

另外上图中还有两块扩展板组,一块是WiFi模块(esp8266 或者 esp32),另外一块是用于显示屏的扩展button模块(用于实现通过按键对显示屏内容的控制)

3. 软件原理以及流程

核心

OpenEVSE 控制器:基于arduino ,扩展 WiFi模块

OpenEVSE 控制器:主要芯片为微控制器 ATmega328p ,arduino IDE 开发环境

 控制充电速率,OpenEVSE 通过改变pwm信号方波占空比来请求特定的充电速率

 显示充电过程,外接扩展板,实现按键控制lcd显示模块显示充电的过程;
 数据同步上传,外接WiFi模块实现数据的上传,可扩展web服务器,emoncms 开源网站等,实现数据上传,还可以扩展MQTT
 实现远程控制,通过 RAPI 指令实现远程的监控和控制

WiFi模块:ESP32(老版本用的ESP8266)

**继电器模块:**不同的电压转换需要不同的型号,控制器控制继电器开关实现充电的开始与停止

扩展板:实现LCD屏幕显示充电状态,还可以通过button 控制,LCD屏的显示状态

数据记录:本质根据ESP32模块的不同分为2种方式

 ESP32 配置为 AP模式,用户连接ESP32的WiFi,在ESP32的服务器 web端(暂且称为 openevse web)实现数据的记录和监控
 ESP32 配置为STA模式,和本地的 emonpi 连接到同一路由下,用户可以访问emonpi,可以通过emonpi实现数据的监控记录
 ESP32配置为STA模式,直接将数据发送至远程的服务器,例如emoncms.org,用户访问远程服务器实现数据的监控记录

注意:mqtt 服务器 和 emoncms 服务器不要是同一个服务器如emonpi,这会导致数据重复。

源代码理解:

源代码中是基于arduino的多任务框架编程的,将每个模块分为不用的 task ,去执行不同的动作,是以时间为划分标准,定期执行相应的任务,摒弃了耗费CPU资源的 delay函数,实现多任务轻量级实现,实现类似于操作系统的任务调度的功能。

多任务调度实现:在main函数的setup函数中,将每个模块的任务,如 eventLog、timeManager、evse、scheduler这些模块,xxx.begin()函数中利用 MicroTask.startTask()函数将任务添加进去,实现调度。在loop函数中利用 MicroTask.update();函数,监控哪些任务触发到时了,然后执行相应任务。

4. 系统结构:

OpenEVSE 固件加载

https://github.com/OpenEVSE/open_evse/blob/stable/firmware/open_evse/LoadingFirmware.md

平台:Platform IO Core或者Platform IDE (若使用 IDE 则不需在安装IO Core) 或者 Arduino IDE ,

可选 - 要将自定义板添加到 Arduino IDE,请将“boards.txt”复制到文件夹 ~\Arduino\hardware\openevse\avr。完成此操作(并重新启动 Arduino)后,您将在 Boards 菜单中找到一个名为“OpenEVSE”的新条目。准备上传固件时选择该选项。

open_evse.name=OpenEVSEopen_evse.bootloader.low_fuses=0xFF
open_evse.bootloader.high_fuses=0xDA
open_evse.bootloader.extended_fuses=0x05open_evse.upload.using=avrispmkii
open_evse.upload.maximum_size=32768open_evse.build.mcu=atmega328p
open_evse.build.f_cpu=16000000L
open_evse.core=arduino
open_evse.build.variant=standard

注意:使用 WATCHDOG 时要格外小心,如果添加的延迟超过了计时器,EVSE 板将在无限循环中重置。恢复可能非常困难或不可能。

平台的安装: 下载vscode,然后在扩展程序中安装platformIO IDE ,注意安装时间较长,它功能强大,可以支持集成大多数常用的芯片和模块的开发任务。

(物联网越来越成为炙手可热的领域,不过提到嵌入式IoT开发,最让人不舒服的一件事无疑就是不同厂家的芯片可能要使用不同的集成开发环境。例如:STM32要使用Keil,Arduino默认使用自家Arduino开发环境,而且Keil和Arduino都不够友好;ESP8266和ESP32要使用linux环境或者在windows下部署eclipse,涉及到交叉编译工具,所以操作起来也比较复杂)

设置: https://docs.platformio.org/en/latest/integration/ide/vscode.html#quick-start

OpenEVSE 的 WiFi V4 参考网站:

Wifi 模块 ESP32,通过串行 RAPI OpenEVSE 控制器通信,Web 界面直接从ESP32 的web服务器获取数据,并可通过网络上的连接设备进行控制。

硬件部分

ESP8266 - 只能运行 V2.x 固件 ESP32 - 可以运行 V3.x 和 V4.x 固件

OpenEVSE V1 - 专为 V4.x 固件设计 ESP32网关-V3.x 和 V4.x

无线网络设置:首次启动时,OpenEVSE 应该广播一个 WiFi 接入点 (AP)OpenEVSE_XXXX,默认密码: openevse,连接后自动转到登录界面,若没跳转,则登录以下几个网址:http://openevse http://openevse.local 或 http://192.168.4.1

注意: 按住boot / GPIO0ESP8266 模块上的按钮约 5 秒将强制 WiFi 接入点模式。这在尝试将设备连接到新的 WiFi 网络时很有用。如果设备无法连接到 WiFi 网络,它将在重试连接之前返回 AP 模式

充电模式“生态”充电模式允许 OpenEVSE 根据 MQTT 自动启动/停止和调整充电电流。 > 1.4kW (6A) 时将开始充电, < 1.4kW (6A) 时,充电将暂停,可以通过 MQTT 启用/禁用 Eco 模式;环保模式,使用时启动 MQTT 服务,注意,EVSE 期望 MQTT 数据每 5-10 更新一次,如果更新间隔太快或太慢,性能将会下降。两种模式可以通过 mqtt 来控制,主题:<base-topic>/divertmode/set value:1=正常 2=生态模式

数据记录, 通过WiFi模块实现,(esp32 或者8266)OpenEVSE 可以使用 Emoncms 的 API 将数据发布到 Emoncms.org 网站上,或其他 Emoncms 服务器(例如emonpi),数据每30s 发布一次,可以使用HTTP 或者 HTTPS 发布。OpenEVSE 可以将其状态值(例如 amp、wh、temp1、temp2、temp3、pilot、status)发布到 MQTT 服务器。数据将作为基础主题的子主题发布。例如/amp。数据每 30 秒发布到 MQTT。

通俗的讲自己理解

(1)openevse 的 WiFi 模块可以配置为一个服务器,手机或者电脑连接openevse 的WiFi之后,可以在OPenevse的web端看到可视化界面,可以使用mqtt。(esp32 是 mqtt连接的服务器)

(2)openevse 的 WiFi 模块可以配置为一个客户端,连接服务器,该服务器可以是本地的emonpi,也可以是远程的emoncms,openevse可以通过mqtt 将数据发送至本地的emonpi,并使用emoncms将数据发布至emoncms远程服务器上,如emoncms.org。

MQTT,启动时发布以下消息,当连接设备节点时,应当订阅主题:openevse/announce/#

{"state":"connected","id":"c44f330dxxad","name":"openevse-55ad","mqtt":"emon/openevse-55ad","http":"http://192.168.1.43/"
}
当断开连接时,将发布相同的消息,state 替换为 : state":"disconnected"

默认情况下,所有后续 MQTT 状态更新都将发布到设备 ID 的最后 4 个字符所在的openevse-xxxx位置。xxxx可以通过 MQTT 服务页面更改此基本主题。OpenEVSE 可以将其状态值(例如 amp、wh、temp1、temp2、temp3、pilot、status)发布到 MQTT 服务器。数据将作为基本主题的子主题发布,例如<base-topic>/amp. 数据每 30 秒发布到 MQTT。默认<base-topic>是设备 ID 的最后 4 个字符,openevse-xxxx中的xxxx

注意:如果想将 OpenEVSE 的数据发布到 emonpiemoncms 服务器上,则 base topic 应该为 emon/xxxx

固件升级,可以通过web界面实现,请参阅 OpenEVSE Wifi版本。

远程控制:通过 RAPI 命令,进行远程控制和监控,这些命令可以通过串行直接发出, 也可以添加 OpenEVSE WiFi 套件 (如ESP8266) 以允许通过 HTTP Web 界面远程发出 RAPI 命令。

可变充电速率: OpenEVSE 充电控制器可以改变充电速率,本质上是控制器“请求”改变充电速率,因为实际上改变充电速率的直接设备是汽车的充电站。OpenEVSE 通过改变导频信号方波占空比来请求特定的充电速率,充电速率可以6-28A,以1A为增量变化。汽车几乎立即响应来自 OpenEVSE 控制器的充电率调整请求。如果需要,还可以远程暂停和恢复充电。

OpenEVSE WiFi ESP32 网关 v4

WiFi模块使用的是ESP32,

如果通过WiFi不方便连接到OpenEVSE ,则可以通过 ESP32-Gateway 有线网连接,该模块是 ESP8266 / ESP32 WiFi 模块的替代品,兼容所有型号的 OpenEVSE / EmonEVSE。

ESP32

基本的配网流程:

AP模式:你是个路由器,别人连接你 station 模式:你是个客户端(如,手机),你需要连接别的路由

上电—>wifi初始化为ap模式—>开启http服务器—>用户连上esp32wifi—>浏览器输入esp网关地址默认是192.168.1.4—>在页面上输入要连接的wifi名称和密码—>点击页面上的发送按钮—>浏览器通过post请求将wifi名称和密码发送到esp32—>esp32解析出wifi名称和密码—>退出wifi-ap模式,关闭http服务器—>将wifi名称和密码作为参数,将wifi初始化为station模式

**说人话:**模块官方有配套的ble和smartconfig配网方式,优点是例程,开发方便。缺点是,需要在手机上装app,并且电脑还没办法配网,只能用手机

通过esp32自建web服务器实现配网。具体来说,可以是以下步骤:
1、esp32上电,手机/电脑/平板连上esp32的wifi。
2、用浏览器访问esp32的网址esp32默认是192.168.4.1
3、在web页面中输入需要esp32连接的wifi名称,和wifi密码
4、esp32自动连接上指定的wifi

ESP32 可以配置为服务器,去响应客户端的请求,可以由以下步骤:

  1. 将ESP32配置为STA模式,发出WiFi信号,电脑连接esp32 模块
  2. 开启网络服务器,开启之后,作为服务器要响应来自客户端的HTTP请求(有效响应、无效响应等)

【esp32的web服务器】

Web服务器是发送和接收信息,处理信息并存储信息的地方。 Web服务器还可以在网页上显示这些信息。服务器通过称为超文本传输协议(HTTP)的协议与用户通信。当请求发送到此服务器时(例如,在浏览器中搜索其地址),服务器返回代码作为响应(例如,代码200,表示连接已正确建立,或代码404,表示地址不正确)。注意:两台服务器要想实现简单通信,是要在同一网段之下才能进行的

RAPI API

RAPI 命令可用于控制和检查所有 OpenEVSE 函数的状态。RAPI 命令可以通过串口、Web 界面、HTTP 和 MQTT 发出。我们建议在 MQTT 上使用 RAPI。建议通过mqtt 协议 将RAPI 命令发出,参考视频:

MQTT 上的 RAPI:

RAPI 命令可以通过 MQTT 消息发送, RAPI 命令应该通过 MQTT 发布以下消息:

<base-topic>/rapi/in/<$ rapi-command> payload 如: openevse/rapi/in/$SC 13 将电流设置为13A

如果 RAPI 命令不需要 payload ,则有效负载可以留空,例如:openevse/rapi/in/$GC

可以通过订阅以下主题接收:<base-topic>/rapi/out/#

科普文章:

如何将 ESP32 以太网模块连接到电动汽车充电站

5. SAE J1772协议简析:

先科普一个ISO15118新能源汽车的协议

GFCI 或 GFI :接地故障电流

OpenEVSE 充电桩控制器遵循SAE J1772协议 和 IEC Type 1-2充电站

https://openev.freshdesk.com/support/solutions/articles/6000052074-basics-of-sae-j1772

https://www.zhihu.com/people/mai-ke-56-67/posts

它是一个 1Khz 的 ±12v 的方波,占空比决定了最大可用电流,EVSE设定占空比,电动汽车必须遵守原始设定或更改占空比。通俗的说,定义一个模拟的PWM通信协议使得充电桩(EVSE)可以将所支持的最大充电电流通知给电动汽车(EV)。该协议是通过对CP信号进行脉冲宽度调制(PWM)来实现的。1kHz 的PWM信号由充电桩产生,实际充电的电流大小由汽车(EV)来决定。CP线上的电压(和地线(PE)的电压差[V])用来区别不同的桩和车之间的连接状态:

State A (+12 V)电动汽车没有连接到充电桩
State B (+9V)电动汽车连接到充电桩,但没有开始充电。
State C (+6V)电动汽车连接到充电桩上,准备好开始充电 (不需要通风 ventilation)
State D (+3V)电动汽车连接到充电桩上,准备好开始充电 (需要通风 ventilation)
State E (+0V)电网供电有问题或未连接到电网。
State F (-12 V)充电桩未准备好。

6. 专用充电接插件

检测引脚,Proximity Detection:防止连接到充电器时汽车移动,用来检查车辆是否插有充电插头

通讯引脚,Control Pilot :用于协调汽车和充电器之间的充电阶段的线路,决定了充电功率的大小。

7 . 源码解析:

首先,Arduino编程语言是没有main()函数的,主体函数有2个分别为,setup和loop函数。setup() 函数中完成Arduino的初始化设置,如配置I/O口状态,初始化串口等操作,在整个阶段只执行一次。setup()函数将只运行一次,loop函数体内的循环一直执行,每次loop结束后,都会进行串口事件判断。

OCPP:是电动载具(EV)和充电桩之间的应用层通讯协定,也是中央式的管理系统,也称为充电站网络,目前是要建立开放式的应用层协定,让不同制造商的充电桩和中央管理系统可以互相通讯

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_224913.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查阅必备----常用的SQL语句,配语句和图解超详细,不怕你忘记

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 **收录于专栏 数据库 ⭐查阅必备–常用的SQL语句⭐ 文章目录⭐查阅必备--常用的SQL语句⭐一&#xff0c;关键语句大全&am…

python离线安装module以及常见问题及解决方案

文章目录一&#xff0c;离线安装module1.1 下载module1.2 离线安装二&#xff0c;常见的问题2.1 模块缺少合适的适配&#xff1a;error: Could not find suitable distribution for Requirement.parse()2.2 install成功但发现控制台打印的最后一行显示下载module版本为0.0.0工作…

微信商城小程序怎么开发_分享微信商城小程序的搭建

如何搭建好一个微信商城&#xff1f;这三个功能要会用&#xff01; 1.定期低价秒杀&#xff0c;提高商城流量 除了通过私域流量裂变&#xff0c;低价秒杀是为商城引流提高打开率的良好手段。 以不同节日作为嘘头&#xff0c;在情人节、38妇女节、中秋国庆、七夕节等日子&…

机器学习-回归模型相关重要知识点

目录01 线性回归的假设是什么&#xff1f;02 什么是残差&#xff0c;它如何用于评估回归模型&#xff1f;03 如何区分线性回归模型和非线性回归模型&#xff1f;04 什么是多重共线性&#xff0c;它如何影响模型性能&#xff1f;05 异常值如何影响线性回归模型的性能&#xff1f…

R语言结课及Matlab开始

R语言结课 我们R语言的学习这节课下课就结束了&#xff0c;接下来进行Matlab的学习。下面我会说一下R的结课任务及如何考试&#xff0c;以及我自己整理的Matlab安装教程。 R的结课作业&#xff1a;周二上课时提到的两个回归模型课程总结&#xff08;老师说作业总结主要是作业…

通过ref进行组件间的通信

ref&#xff1a;绑定dom节点&#xff0c;拿到的就是dom对象&#xff1b; ref&#xff1a;绑定组件&#xff0c;拿到的就是组件对象&#xff1b; ref绑在dom节点上&#xff1a; //绑在dom上&#xff0c; <input type"text" ref"mytext"> <input…

SpringBoot SpringBoot 开发实用篇 6 监控 6.3 actuator

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.3 actuator6.3.1 actuator6.3.2 监控原理6.3.3 小结6 监控 …

IOS逆向初探

前言 这些文章用于记录学习路上的点点滴滴&#xff0c;也希望能给到刚入门的小伙伴们一点帮助。爱而所向&#xff0c;不负所心。 环境 iphone 6 MacOS Monterey 12.3.1 一、IOS开发语言 Objective-C Objective-C是iOS操作系统运用的软件开发语言。Objective-C的流行完全是因…

Flutter高仿微信-第21篇-支付-向商家付款(二维码)

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; /*** Author : wangning* Email : maoning20080809163.…

【Hack The Box】Linux练习-- Knife

HTB 学习笔记 【Hack The Box】Linux练习-- Knife &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月17日&#x1f334; &#x1f36…

【计算机网络】Servlet API重点知识汇总

目录 1.HttpServlet&#xff1a; 2.HttpServletRequest&#xff1a; 3.HttpServletRequest代码实例&#xff1a; 3.1.打印请求的内容&#xff1a; 3.2.获取请求中的重要参数 &#xff08;query string中的值&#xff09;&#xff1a; 3.3.获取请求中的重要参数 &#x…

用HTML+CSS仿网易云音乐网站(6个页面)_实训素材

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 音乐网页设计 | 仿网易云音乐 | 各大音乐官网网页 | 明星音乐演唱会主题 | 爵士乐音乐 | 民族音乐 | 等网站的设计与制作 | HTML期末大学生网页设计作…

【安装教程】vscode安装教程(超详细)

Visual Studio Code&#xff08;简称 VSCode&#xff09;是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代码自动补全、代码重构功能&#xff0c;并且内置了命令行工具和 Git版本控制系统。用户可以更改主题和键盘快捷方式实现个性化设置&#xff0c;也可以…

SpringBoot SpringBoot 开发实用篇 6 监控 6.5 health 端点指标控制

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.5 health 端点指标控制6.5.1 问题引入6.5.2 health 端点指标…

还有人以为高并发=多线程吗?跟着大佬带你了解二者关系与区别,面试难题轻松拿下!

高并发和多线程的关系 “高并发和多线程”总是被一起提起&#xff0c;给人感觉两者好像相等&#xff0c;实则高并发≠多线程 多线程是完成任务的一种方法&#xff0c;高并发是系统运行的一种状态&#xff0c;通过多线程有助于系统承受高并发状态的实现。 高并发是一种系统运…

Android 10.0 11.0 12.0 启动模拟器教程

Android 10.0 11.0 12.0 启动模拟器教程 一、android 12.0 模拟器二、创建模拟器设备三、创建删除路经文件夹avd和配置环境变量四、启动模拟器一、android 12.0 模拟器 Android 10.0 11.0 12.0 启动模拟器都行,我选择android 12.0 模拟器 二、创建模拟器设备 第一步骤:在 …

推荐一个基于Springboot + Vue 开发的前后端分离博客

基于Springboot Vue 开发的前后端分离博客 博客介绍 本博客是参考 [风丶宇] 大佬的博客更新而成&#xff0c;感谢大佬提供的页面&#xff0c;然后定制新增部分功能&#xff0c;是个非常值得新手入门学习的Java规范化编程案例&#xff01; 在线地址 项目链接&#xff1a; h…

JVM 中类加载的链接与初始化

类加载系统&#xff0c;主要有以下部分 加载链接 验证准备解析初始化 它们每部分都做些什么事情呢&#xff1f; 加载 (2条消息) JVM 双亲委派模型_兜兜转转m的博客-CSDN博客 链接 链接-验证 一般验证部分&#xff0c;IDEA已经帮我们规范了。 验证是连接阶段的第一步&…

数据结构和常用排序算法复杂度

1.顺序表 插入操作时间复杂度 最好O(1)&#xff0c;最坏O(n)&#xff0c;平均O(n) 移动结点的平均次数n/2 删除操作时间复杂度 最好O(1)&#xff0c;最坏O(n)&#xff0c;平均O(n) 移动结点的平均次数(n-1)/2 按值查找时间复杂度 最好O(1)&#xff0c;最坏O(n)&#xff0c;平…

JVM垃圾回收——CMS垃圾收集器

目录 一、什么是CMS垃圾收集器 二、CMS垃圾收集的过程 三、CMS收集器的不足 四、CMS收集器的参数配置 一、什么是CMS垃圾收集器 虽然HotSpot虚拟机已经在jdk14中移除了CMS垃圾收集的参数&#xff0c;但是考虑到还有很多开发是基于jdk8开发的&#xff0c;所以还是有必要了解…