前言

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

一、所需元件

放个作品实拍图

以下部分为所需元件:
1.ESP-01S一个;
2.0.91寸oled(ssd1306&IIC版)一个;
3.INA226模块或者芯片一个;
4.电源芯片MP1584EN;
5.外围电路所需阻容元件若干。
注:下面的链接是我用立创EDA绘制的PCB文件,链接的附件里还有库函数和代码。
https://oshwhub.com/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进行开发,需要安装对应的芯片包,具体操作步骤见下面的链接。
https://www.arduino.cn/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的乐趣,不考虑成本,需要有一定的焊接水平,有问题可以留言,所有的文件我已开源,请尽情享用。

基于ESP-01S的USB电压电流表相关推荐

  1. 基于BLINKER和ESP8266的无线USB电压电流表

    一.方案概述 目前市场上的USB电压电流表很多,但是数据的测量精度和采样频率都是固定的,本着DIY的精神设计了基于BLINKER的无线USB电压电流表,实现电流的精度和采样频率都可调节.总体方案如下, ...

  2. ft232h引脚_一种基于芯片ft232h的usb接口电路的制作方法

    一种基于芯片ft232h的usb接口电路的制作方法 [技术领域] [0001 ] 本实用新型涉及一种USB接口电路,具体涉及一种基于芯片FT232H的USB接口电路. [背景技术] [0002]USB ...

  3. linux网卡驱动rtl8188cu,linux下编译基于rtl8188cu控制芯片的USB无线网卡驱动 -电脑资料...

    本人因为实验的需要,需要在嵌入式linux环境下添加wifi功能,通过在网上调研,选择基于rtl8188cu控制芯片的水星NW150UM无线USB网卡,现简单记录下配置过程, 1.下载最新的rtl81 ...

  4. 基于CH375的嵌入式USB文件加解密系统的设计

    基于CH375的嵌入式USB文件加解密系统的设计 [日期:2008-7-21] 来源:电子技术应用  作者:华中科技大学 电子与信息工程系, 湖北 武汉 430074 [字体:大 中 小] <s ...

  5. Linux下V4L2框架基于SDL库本地USB摄像头监控

    Linux下V4L2框架基于SDL库本地USB摄像头监控 1.摄像头框架编程步骤 (1)打开摄像头设备(/dev/video0 ./dev/video1 ) (2)设置图像格式:VIDIOC_S_FM ...

  6. linux mic阵列通道丢数据,基于XMOS平台的USB麦克风阵列多声道采集装置

    技术领域 本实用新型涉及麦克风阵列多声道声音采集领域,尤其涉及基于XMOS平台的USB麦克风阵列多声道采集装置. 背景技术 麦克风阵列(Array Microphone),是由2个以上数量的声学数字或 ...

  7. 嵌入式linux作为hid设备,基于嵌入式系统的USB(HID)设备

    基于嵌入式系统的USB(HID)设备 目前嵌入式系统在数字化电子产品领域应用越来越广泛.随着其成本的降低,大有取代单片机的趋势. USB设备以其小巧.便携.即插即用.成本低廉等优势在当前的桌面应用中有 ...

  8. linux usb显卡驱动,基于Linux系统的USB显卡多用户平台开发

    摘要: 自上个世纪九十年代以来,Linux系统得到了快速的发展,由于Linux继承了UNIX的以网络为核心的设计思想,采用模块化的设计结构,使得Linux取得了广泛的应用.于此同时,计算机硬件也取得了 ...

  9. ft232h引脚_一种基于芯片FT232H的USB接口电路

    技术领域 本实用新型涉及一种USB接口电路,具体涉及一种基于芯片FT232H的USB接口电路. 背景技术 USB的英文全称为Universal Serial Bus,中文含义是通用串行总线,它是一种快 ...

最新文章

  1. BGA封装芯片手工焊接攻略
  2. 计算机二级评卷看结果还是步骤,计算机二级评分严格吗 步骤错了有分吗
  3. jenkins的安装配置,插件配置,安装插件,配置maven,jdk路径,配置安装插件,项目配置,自动构建配置
  4. [数据结构专训][GXOI/GZOI2019]旧词,[hdu5118]GRE Words Once More!,[hdu6333]Problem B. Harvest of Apples
  5. 用Proteus学习51单片机之I2C(IIC)总线
  6. 漫步最优化十九——封闭算法
  7. 那些不用上班的老人每天是不是很幸福?
  8. Asp.net中Global.asax
  9. python数据结构基础的重点内容_Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】...
  10. php 安卓百度地图,Android百度地图开发总结
  11. RAID磁盘阵列管理
  12. 英特尔显卡linux管理_Intel Linux 显卡驱动安装指南
  13. Ubuntu Screen 后台启动程序安装与运行
  14. Android编程权威指南(第4版)第16章使用Intent调用相机闪退问题
  15. 94、DehazNeRF: Multiple Image Haze Removal and 3D Shape Reconstruction using Neural Radiance Fields
  16. 刷百度下拉那个词与百度快排点击原理是什么?做快排网站降权怎么办?
  17. 金融开发常用术语解释
  18. matlab动手实现k均值聚类的图像分割
  19. Java开源生鲜电商平台-订单抽成模块的设计与架构(源码可下载)
  20. linux c语言静态库,linux下的C语言开发(静态库/动态库)

热门文章

  1. 首航新能冲刺上市:主打并网逆变器,宁德时代、深创投均为股东
  2. 蓝桥杯STM32学习之G431、F103基础知识(二)
  3. JS获取URL参数(银联二维码用过)
  4. 猪肉价格跌至去年最低水平 区块链养猪成热点
  5. Linux用户与内核空间交互—sysfs
  6. 企服云——一款永久免费的问卷调查设计平台
  7. X86 X64 区别
  8. android 自定义录像机,快速录像机(锁屏录像)
  9. 连接数据库出现ORA-12518: TNS: 监听程序无法分发客户机连接错误
  10. MySQL:字符串截取函数 substring_index