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

news2024/11/15 17:58:54

【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=OpenEVSE

open_evse.bootloader.low_fuses=0xFF
open_evse.bootloader.high_fuses=0xDA
open_evse.bootloader.extended_fuses=0x05

open_evse.upload.using=avrispmkii
open_evse.upload.maximum_size=32768

open_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.coloradmin.cn/o/31855.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

A. Tokitsukaze and Strange Inequality(前缀和+桶)

Problem - 1677A - Codeforces 时津风有一个长度为n的排列组合p。回顾一下&#xff0c;长度为n的排列组合p是由n个不同的整数组成的序列p1,p2,...,pn&#xff0c;每个整数从1到n&#xff08;1≤pi≤n&#xff09;。 她想知道在这个排列组合中&#xff0c;有多少个不同的指数图…

玩转MySQL:你知道什么是表分区吗

引言 分库分表相信大家都听说过&#xff0c;但(partitioning)表分区这个概念却鲜为人知&#xff0c;MySQL在5.1版本中开始支持了表分区技术&#xff0c;同时在MySQL5.5中进行了优化&#xff0c;自从MySQL支持的绝大部分引擎都开启了表分区功能。 但到底什么是表分区技术呢&…

基于golang+uniapp+python 实现的一套A股提醒系统

shareshttps://github.com/xxjwxc/shares 功能 A 股量化交易系统 后台开发语言 Go/Python gmsechttps://github.com/gmsec/gmsec gormt 嵌入&#xff0c;自动数据库代码生成 gorm 自动构建(gormt)https://github.com/xxjwxc/gormt 分时任务,盯盘助手,研报股评,每日监控,微信…

Bioinformatics2022 | AdvProp+:基于集成网络的分子性质预测与药物研发

论文标题&#xff1a;Advanced graph and sequence neural networks for molecular property prediction and drug discovery 代码&#xff1a;https://github.com/divelab/MoleculeX 一、Materials and methods 1、Notations and problem definitions 旨在通过基于图和基于…

Vue基础5

Vue基础5绑定样式绑定class样式绑定style样式条件渲染列表渲染v-for指令key的原理index作为key的时候id作为key的时候总结绑定样式 class样式 写法&#xff1a;class"xxx“ xxx可以是字符串、对象、数组 字符串的写法适用于&#xff1a;类名不确定&#xff0c;要动态获取…

如何做一个小程序商城,需要多少钱

如何做一个小程序商城&#xff0c;需要多少钱&#xff1f; 操作像玩消消乐那么简单&#xff01; 费用是一年1998元至3498元。免300元认证费。买两年用四年。 日均花费不到2元就能搭建一个小程序商城。 下面分享的是自建小程序商城的教程: 1、进入第三方小程序商城制作平台…

Mybatis-Plus中getOne方法获取最新一条数据

Mybatis-Plus中getOne方法获取最新一条数据一、代码1、Controller2、Service3、效果一、代码 1、Controller GetMapping("/queryNewProduct")public ProductDTO queryNewProduct(RequestParam("type") String type) {return opProductService.queryNewPro…

Python基础(二):不同系统安装Python3

​​​​​​​ 文章目录 不同系统安装Python3 一、Anaconda安装与使用 1、下载 2、安装 3、配置 4、使用 5、常用命令 二、原生Python安装 三、在Linux环境Python安装 不同系统安装Python3 14天学习训练营导师课程&#xff1a;杨鑫《Python 自学编程基础》杨鑫《 P…

HTML学生个人网站作业设计——中华美食(HTML+CSS) 美食静态网页制作 WEB前端美食网站设计与实现

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

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

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

第二章 数据库设计

数据库技术是信息资源管理最有效的手段。数据库设计是指对于一个给定的应用环境&#xff0c;构造最优的数据库模式&#xff0c;建立数据库极其应用系统&#xff0c;有效存储数据&#xff0c;满足用户信息要求和处理要求。 数据库设计的步骤 ⒈需求分析阶段 收集和分析用户需…

怎么搭建属于自己的网站?

搭建属于自己的网站已经不是什么新鲜事了&#xff0c;有些人甚至搭建一个网站用来做自己的简历。搭建网站对一些懂代码的人来说也是比较简单的&#xff0c;就算不精通也能下载源代码模板。那如果不太懂代码的小伙伴&#xff0c;又怎么搭建属于自己的网站呢&#xff1f; 一、善…

SpringBoot 代码混淆真香,再也不用担心反编译代码泄露...

编译 简单就是把代码跑一哈&#xff0c;然后我们的代码 .java文件 就被编译成了 .class 文件 反编译 就是针对编译生成的 jar/war 包 里面的 .class 文件 逆向还原回来&#xff0c;可以看到你的代码写的啥。 比较常用的反编译工具 JD-GUI &#xff0c;直接把编译好的jar丢进…

MySQL 进阶 图文详解InnoDB储存引擎

前言 SQL 语句的最终执行者是存储引擎。存储引擎在经解析器、优化器处理后被执行器调用其接口执行优化后的执行计划。MySQL 存储引擎包括 InnoDB、Myisam、Memory、Archive、CSV 存储引擎等&#xff0c;其中最常用也是MySQL 默认的存储引擎是 InnoDB。 写入缓冲池&#xff08;…

cyclictest生成结果统计图

在用cyclictest测试实时性的时候通过输出的结果能清晰的看到最大值、最小值平均值&#xff0c;但具体的分布情况无法直接得到。 本文记录根据网上的博客实际测试结果。 1、先在开发板上运行测试程序 ./cyclictest -l 1000000 -m -Sp99 --policyfifo -h 25000 -q >output 得…

华为机试 - 高矮个子排队

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 现在有一队小朋友&#xff0c;他们高矮不同&#xff0c;我们以正整数数组表示这一队小朋友的身高&#xff0c;如数组{5,3,1,2,3}。 我们现在希望小朋友排队&#xff0c;以“高”“矮”“高”“矮”顺…

专利变更需要哪些材料

一、专利变更需要哪些材料 专利权人变更专利的&#xff0c;需要提供著录项目变更请求书、著录项目变更证明材料、专科权人身份证明等材料。 《专利法实施细则》 第八十九条 国务院专利行政部门设置专利登记簿&#xff0c;登记下列与专利申请和专利权有关的事项&#xff1a; …

聚观早报|苹果高管称ipad在走下坡路;罗永浩新公司完成融资

今日要闻&#xff1a;苹果高管称ipad在走下坡路&#xff1b;罗永浩新公司完成融资&#xff1b;谷歌发布最新可持续发展成果&#xff1b;比亚迪新能源车涨价&#xff1b;惠普宣布裁员6千人 前苹果高管称ipad在走下坡路 据报道&#xff0c;前苹果公司高管让路易斯加塞近日表示&am…

无符号、有符号数运算判溢出

目录 无符号数的运算&#xff08;溢出看CF&#xff09; 有符号数运算&#xff08;溢出看OF&#xff09;&#xff08;都是补码进行运算&#xff0c;因为补码的符号位可以直接参与运算一套电路就ok&#xff09; 例题 第一题 第二题 无符号数的运算&#xff08;溢出看CF&#…

会议信息管理系统SSM记录(六)

目录&#xff1a; &#xff08;1&#xff09;会议预定1 &#xff08;2&#xff09;会议预定2 &#xff08;3&#xff09;会议预约3 &#xff08;4&#xff09;会议预定4 &#xff08;1&#xff09;会议预定1 创建MeetingController&#xff1a; //跳转预定会议页面Request…