600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 基于ESP-01S的USB电压电流表

基于ESP-01S的USB电压电流表

时间:2020-11-01 09:44:26

相关推荐

基于ESP-01S的USB电压电流表

前言

强迫症的手里绝对不能多一颗主控芯片,而我恰巧多一颗esp-01s,更让人难受的是它只有4个I/O,逛遍立创开源广场发现做个电压电流表还是不错的选择,下面开搞!

一、所需元件

放个作品实拍图

以下部分为所需元件:

1.ESP-01S一个;

2.0.91寸oled(ssd1306&IIC版)一个;

3.INA226模块或者芯片一个;

4.电源芯片MP1584EN;

5.外围电路所需阻容元件若干。

注:下面的链接是我用立创EDA绘制的PCB文件,链接的附件里还有库函数和代码。

/Engineer_Jiang/dian-ya-dian-liu-biao

二、硬件IO分配

由于ESP-01S仅有四个IO,且其中两个默认为TX(GPIO-1)和RX(GPIO-3),本项目是双路IIC通信,所以IO0/2用于INA226的硬件IIC通信,IO1/3则使用U8G2库进行软件模拟IIC与0.91 oled屏幕通信,不在使用串口功能。具体分配是:

SDA_SSD1306 1

SCL_SSD1306 3

SDA_INA226 0

SCL_INA226 2

三、软件代码

本项目是基于ARDUINO IDE进行开发,需要安装对应的芯片包,具体操作步骤见下面的链接。

/thread-76029-1-1.html

1.引入库

所需库有两个:

1.INA226;

2.U8G2。

库文件在所需元件的链接里面可以下载,将压缩包解压至安装Arduino的路径下libraries文件夹内即可。

2.项目完整代码

不啰嗦上代码:

#include <Arduino.h>#include <U8g2lib.h>#include <Wire.h>#include <INA226.h>#define SDA_SSD1306 1#define SCL_SSD1306 3#define SDA_INA226 0#define SCL_INA226 2U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C u8g2(U8G2_R0, /*clock=*/ SCL_SSD1306, /*data=*/ SDA_SSD1306, /*reset=*/ U8X8_PIN_NONE);INA226 ina;unsigned long now_time, old_time1, old_time2;float BusVoltage, ShuntCurrent, BusPower;void setup() {Wire.begin(SDA_INA226,SCL_INA226);ina.begin();ina.configure(INA226_AVERAGES_128, INA226_BUS_CONV_TIME_1100US, INA226_SHUNT_CONV_TIME_1100US, INA226_MODE_SHUNT_BUS_CONT);ina.calibrate(0.01, 6);u8g2.begin();}void loop() {now_time = millis();if( (now_time - old_time2) >= 15){BusVoltage = ina.readBusVoltage();ShuntCurrent = ina.readShuntCurrent();BusPower = ina.readBusPower(); old_time2 = now_time; }if( (now_time - old_time1) >= 250){u8g2.firstPage();do{VoltageDisplay();CurrentDisplay();PowerDisplay();} while ( u8g2.nextPage() );old_time1 = now_time; }}void VoltageDisplay(){u8g2.setFont(u8g2_font_helvR14_tr);u8g2.setCursor(0, 16);if(BusVoltage >= 10)u8g2.print(BusVoltage,2);elseu8g2.print(BusVoltage,3);u8g2.setCursor(47, 16);u8g2.print("V");}void CurrentDisplay(){u8g2.setFont(u8g2_font_helvR14_tr);u8g2.setCursor(0, 32);ShuntCurrent = (ShuntCurrent < 0) ? 0 : ShuntCurrent;u8g2.print(ShuntCurrent,3);u8g2.setCursor(47, 32);u8g2.print("A");}void PowerDisplay(){u8g2.drawRFrame(70, 0, 58, 32, 4);u8g2.setFont(u8g2_font_profont22_mr);if(BusPower >= 10){u8g2.setCursor(79, 23);u8g2.print(BusPower,0); u8g2.setCursor(109, 23);u8g2.print("W");}else{u8g2.setCursor(74, 23);u8g2.print(BusPower,1);u8g2.setCursor(114, 23);u8g2.print("W");}}

总结

本项目是纯粹出于DIY的乐趣,不考虑成本,需要有一定的焊接水平,有问题可以留言,所有的文件我已开源,请尽情享用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。