Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
car-controlserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wenzhongjian
car-controlserver
Commits
170e1f10
You need to sign in or sign up before continuing.
Commit
170e1f10
authored
May 22, 2025
by
957dd
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:加入了霍尔传感器的使用和读值与上报
parent
14829c54
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
239 additions
and
90 deletions
+239
-90
CMakeLists.txt
CMakeLists.txt
+1
-1
Makefile
build/Makefile
+27
-0
version.h
build/include/version.h
+2
-2
main
build/main
+0
-0
mqtt.h
include/mqtt.h
+3
-0
softiic.h
include/softiic.h
+5
-4
ip.c
src/ip.c
+1
-1
mqtt.c
src/mqtt.c
+32
-4
softiic.c
src/softiic.c
+29
-28
thread_main.c
src/thread_main.c
+6
-2
INA226.c
system/sensor/INA226.c
+38
-37
INA226.h
system/sensor/INA226.h
+6
-5
ads1115.c
system/sensor/ads1115.c
+66
-0
ads1115.h
system/sensor/ads1115.h
+15
-0
main.c
usr/main.c
+6
-6
main.h
usr/main.h
+2
-0
No files found.
CMakeLists.txt
View file @
170e1f10
cmake_minimum_required
(
VERSION 3.10
)
project
(
DeviceControlSystem
VERSION 1.1.
2
VERSION 1.1.
3
LANGUAGES C
)
...
...
build/Makefile
View file @
170e1f10
...
...
@@ -760,6 +760,30 @@ system/sensor/INA226.c.s:
$(MAKE)
$(MAKESILENT)
-f
CMakeFiles/main.dir/build.make CMakeFiles/main.dir/system/sensor/INA226.c.s
.PHONY
:
system/sensor/INA226.c.s
system/sensor/ads1115.o
:
system/sensor/ads1115.c.o
.PHONY
:
system/sensor/ads1115.o
# target to build an object file
system/sensor/ads1115.c.o
:
$(MAKE)
$(MAKESILENT)
-f
CMakeFiles/main.dir/build.make CMakeFiles/main.dir/system/sensor/ads1115.c.o
.PHONY
:
system/sensor/ads1115.c.o
system/sensor/ads1115.i
:
system/sensor/ads1115.c.i
.PHONY
:
system/sensor/ads1115.i
# target to preprocess a source file
system/sensor/ads1115.c.i
:
$(MAKE)
$(MAKESILENT)
-f
CMakeFiles/main.dir/build.make CMakeFiles/main.dir/system/sensor/ads1115.c.i
.PHONY
:
system/sensor/ads1115.c.i
system/sensor/ads1115.s
:
system/sensor/ads1115.c.s
.PHONY
:
system/sensor/ads1115.s
# target to generate assembly for a file
system/sensor/ads1115.c.s
:
$(MAKE)
$(MAKESILENT)
-f
CMakeFiles/main.dir/build.make CMakeFiles/main.dir/system/sensor/ads1115.c.s
.PHONY
:
system/sensor/ads1115.c.s
system/sensor/heat.o
:
system/sensor/heat.c.o
.PHONY
:
system/sensor/heat.o
...
...
@@ -1446,6 +1470,9 @@ help:
@
echo
"... system/sensor/INA226.o"
@
echo
"... system/sensor/INA226.i"
@
echo
"... system/sensor/INA226.s"
@
echo
"... system/sensor/ads1115.o"
@
echo
"... system/sensor/ads1115.i"
@
echo
"... system/sensor/ads1115.s"
@
echo
"... system/sensor/heat.o"
@
echo
"... system/sensor/heat.i"
@
echo
"... system/sensor/heat.s"
...
...
build/include/version.h
View file @
170e1f10
#define PROJECT_VERSION_MAJOR 1
#define PROJECT_VERSION_MINOR 1
#define PROJECT_VERSION_PATCH
2
#define PROJECT_VERSION_PATCH
3
#define GIT_HASH ""
#define BUILD_TIMESTAMP "2025-05-2
0T12:37:15
"
#define BUILD_TIMESTAMP "2025-05-2
2T11:00:34
"
#define BUILD_USER "orangepi"
build/main
View file @
170e1f10
No preview for this file type
include/mqtt.h
View file @
170e1f10
...
...
@@ -13,6 +13,9 @@ extern char* TOPIC2_BACK;
extern
char
*
TOPIC3_BACK
;
extern
uint16_t
AppExit_pin_pwm
;
extern
int
heartbeat_count
;
//心跳计时
//extern ThreadPool *pool;
#define BROKER_ADDRESS "119.45.167.177"
#define BROKER_PORT 1883
...
...
include/softiic.h
View file @
170e1f10
...
...
@@ -5,15 +5,15 @@ extern int sda_pin; // GPIO0
extern
int
scl_pin
;
// GPIO1
// I2C 起始信号
void
i2c_start
(
int
sda
_pin
,
int
scl_pin
);
void
i2c_start
(
int
sda
,
int
scl
);
// I2C 停止信号
void
i2c_stop
(
int
sda
_pin
,
int
scl_pin
);
void
i2c_stop
(
int
sda
,
int
scl
);
// I2C 发送一个字节
void
i2c_write_byte
(
int
sda
_pin
,
int
scl_pin
,
uint8_t
data
);
void
i2c_write_byte
(
int
sda
,
int
scl
,
uint8_t
data
);
// I2C 读取一个字节
uint8_t
i2c_read_byte
(
int
sda
_pin
,
int
scl_pin
,
bool
ack
);
uint8_t
i2c_read_byte
(
int
sda
,
int
scl
,
bool
ack
);
#endif
\ No newline at end of file
src/ip.c
View file @
170e1f10
...
...
@@ -24,7 +24,7 @@ int ipaddr() {//获取ip
}
//printf("ip:%s\n",ip_address);
my_zlog_debug
(
"ip:%s"
,
ip_address
);
//
my_zlog_debug("ip:%s",ip_address);
freeifaddrs
(
ifap
);
...
...
src/mqtt.c
View file @
170e1f10
...
...
@@ -12,9 +12,12 @@
#include "fileopen.h"
#include "device_change.h"
#include "judg.h"
#include "ads1115.h"
struct
mosquitto
*
mosq
;
int
heartbeat_count
=
0
;
char
*
TOPIC
=
NULL
;
char
*
TOPIC2
=
NULL
;
char
*
TOPIC3
=
NULL
;
...
...
@@ -71,8 +74,7 @@ void on_connect(struct mosquitto *mosq, void *obj, int rc) {//回调函数
}
}
void
mqtt_wirte
(){
//心跳格式,每5s一次心跳
void
heartbeat_send
()
{
//心跳发送格式
float
voltage
=
INA226_readBusVoltage
(
sda_pin
,
scl_pin
);
float
current
=
INA226_readCurrent
(
sda_pin
,
scl_pin
);
char
voltage_str
[
20
];
// 足够存储转换后的字符串的缓冲区
...
...
@@ -86,7 +88,7 @@ void mqtt_wirte(){//心跳格式,每5s一次心跳
char
*
version_num
=
program_version
();
if
(
heat_tem
()
!=
0
)
{
//获取CPU温度
my_zlog_debug
(
"获取cpu温度失败"
);
}
message
=
1
;
...
...
@@ -117,8 +119,34 @@ void mqtt_wirte(){//心跳格式,每5s一次心跳
mosquitto_publish
(
mosq
,
NULL
,
TOPIC3
,
strlen
(
payload
),
payload
,
0
,
false
);
cJSON_Delete
(
root
);
// 释放 cJSON 对象
}
void
angle_mqtt_send
()
{
float
angle_shot
=
ads1115_read_channel
(
2
);
if
(
angle_shot
>
0
){
angle_shot
=
ads1115_read_channel
(
2
)
*
365
/
5
;
my_zlog_debug
(
"%.2f"
,
angle_shot
);
topic_middle_value
();
cJSON
*
root
=
cJSON_CreateObject
();
char
TOPIC_send_angle
[
26
];
sprintf
(
TOPIC_send_angle
,
"dev_rtinfo/%s"
,
TOPIC3
);
cJSON_AddStringToObject
(
root
,
"type"
,
"tank_angle"
);
cJSON_AddNumberToObject
(
root
,
"angle:"
,
angle_shot
);
char
*
payload
=
cJSON_PrintUnformatted
(
root
);
my_zlog_debug
(
"%s"
,
payload
);
mosquitto_publish
(
mosq
,
NULL
,
TOPIC_send_angle
,
strlen
(
payload
),
payload
,
0
,
false
);
cJSON_Delete
(
root
);
// 释放 cJSON 对象
}
}
void
mqtt_wirte
(){
//心跳格式,每5s一次心跳
if
(
AppExit_pin_pwm
==
202
)
angle_mqtt_send
();
if
(
heartbeat_count
>=
100
)
heartbeat_send
();
return
;
}
void
message_3
(
cJSON
*
body
,
cJSON
*
pwm_ctrl
){
//message_type为3,控制pwm
...
...
src/softiic.c
View file @
170e1f10
...
...
@@ -10,62 +10,62 @@ void i2c_delay() {
}
// I2C 起始信号
void
i2c_start
(
int
sda
_pin
,
int
scl_pin
)
{
digitalWrite
(
sda
_pin
,
HIGH
);
digitalWrite
(
scl
_pin
,
HIGH
);
void
i2c_start
(
int
sda
,
int
scl
)
{
digitalWrite
(
sda
,
HIGH
);
digitalWrite
(
scl
,
HIGH
);
i2c_delay
();
digitalWrite
(
sda
_pin
,
LOW
);
digitalWrite
(
sda
,
LOW
);
i2c_delay
();
digitalWrite
(
scl
_pin
,
LOW
);
digitalWrite
(
scl
,
LOW
);
i2c_delay
();
}
// I2C 停止信号
void
i2c_stop
(
int
sda
_pin
,
int
scl_pin
)
{
digitalWrite
(
sda
_pin
,
LOW
);
digitalWrite
(
scl
_pin
,
LOW
);
void
i2c_stop
(
int
sda
,
int
scl
)
{
digitalWrite
(
sda
,
LOW
);
digitalWrite
(
scl
,
LOW
);
i2c_delay
();
digitalWrite
(
scl
_pin
,
HIGH
);
digitalWrite
(
scl
,
HIGH
);
i2c_delay
();
digitalWrite
(
sda
_pin
,
HIGH
);
digitalWrite
(
sda
,
HIGH
);
i2c_delay
();
}
// I2C 发送一个字节
void
i2c_write_byte
(
int
sda
_pin
,
int
scl_pin
,
uint8_t
data
)
{
void
i2c_write_byte
(
int
sda
,
int
scl
,
uint8_t
data
)
{
for
(
int
i
=
7
;
i
>=
0
;
i
--
)
{
digitalWrite
(
sda
_pin
,
(
data
>>
i
)
&
0x01
);
digitalWrite
(
sda
,
(
data
>>
i
)
&
0x01
);
i2c_delay
();
digitalWrite
(
scl
_pin
,
HIGH
);
digitalWrite
(
scl
,
HIGH
);
i2c_delay
();
digitalWrite
(
scl
_pin
,
LOW
);
digitalWrite
(
scl
,
LOW
);
i2c_delay
();
}
// 接收 ACK
pinMode
(
sda
_pin
,
INPUT
);
digitalWrite
(
scl
_pin
,
HIGH
);
pinMode
(
sda
,
INPUT
);
digitalWrite
(
scl
,
HIGH
);
i2c_delay
();
digitalWrite
(
scl
_pin
,
LOW
);
pinMode
(
sda
_pin
,
OUTPUT
);
digitalWrite
(
scl
,
LOW
);
pinMode
(
sda
,
OUTPUT
);
}
// I2C 读取一个字节
uint8_t
i2c_read_byte
(
int
sda
_pin
,
int
scl_pin
,
bool
ack
)
{
uint8_t
i2c_read_byte
(
int
sda
,
int
scl
,
bool
ack
)
{
uint8_t
data
=
0
;
pinMode
(
sda
_pin
,
INPUT
);
pinMode
(
sda
,
INPUT
);
for
(
int
i
=
7
;
i
>=
0
;
i
--
)
{
digitalWrite
(
scl
_pin
,
HIGH
);
digitalWrite
(
scl
,
HIGH
);
i2c_delay
();
data
|=
(
digitalRead
(
sda
_pin
)
<<
i
);
digitalWrite
(
scl
_pin
,
LOW
);
data
|=
(
digitalRead
(
sda
)
<<
i
);
digitalWrite
(
scl
,
LOW
);
i2c_delay
();
}
// 发送 ACK/NACK
pinMode
(
sda
_pin
,
OUTPUT
);
digitalWrite
(
sda
_pin
,
ack
?
LOW
:
HIGH
);
digitalWrite
(
scl
_pin
,
HIGH
);
pinMode
(
sda
,
OUTPUT
);
digitalWrite
(
sda
,
ack
?
LOW
:
HIGH
);
digitalWrite
(
scl
,
HIGH
);
i2c_delay
();
digitalWrite
(
scl
_pin
,
LOW
);
pinMode
(
sda
_pin
,
INPUT
);
digitalWrite
(
scl
,
LOW
);
pinMode
(
sda
,
INPUT
);
return
data
;
}
\ No newline at end of file
src/thread_main.c
View file @
170e1f10
...
...
@@ -67,8 +67,12 @@ void *Mqttbeat(void *arg) {
Delay_Ms
(
15
,
0
);
while
(
1
)
{
ipaddr
();
//获取ip
Delay_Ms
(
3
,
0
);
mqtt_wirte
();
//心跳,3s一个
if
(
AppExit_pin_pwm
==
202
)
Delay_Ms
(
0
,
90
);
if
(
AppExit_pin_pwm
!=
202
)
Delay_Ms
(
0
,
100
);
heartbeat_count
++
;
mqtt_wirte
();
//心跳,3s一个
if
(
heartbeat_count
>=
100
)
heartbeat_count
=
0
;
}
return
NULL
;
}
...
...
system/sensor/INA226.c
View file @
170e1f10
...
...
@@ -4,66 +4,66 @@
float
currentLSB
;
// 初始化 INA226
bool
INA226_begin
(
int
sda
_pin
,
int
scl_pin
)
{
pinMode
(
sda
_pin
,
OUTPUT
);
pinMode
(
scl
_pin
,
OUTPUT
);
digitalWrite
(
sda
_pin
,
HIGH
);
digitalWrite
(
scl
_pin
,
HIGH
);
bool
INA226_begin
(
int
sda
,
int
scl
)
{
pinMode
(
sda
,
OUTPUT
);
pinMode
(
scl
,
OUTPUT
);
digitalWrite
(
sda
,
HIGH
);
digitalWrite
(
scl
,
HIGH
);
return
true
;
}
// 配置 INA226
bool
INA226_configure
(
int
sda
_pin
,
int
scl_pin
)
{
bool
INA226_configure
(
int
sda
,
int
scl
)
{
uint16_t
config
=
0x4127
;
// 默认配置:16 次平均,1.1ms 转换时间,连续模式
i2c_start
(
sda
_pin
,
scl_pin
);
i2c_write_byte
(
sda
_pin
,
scl_pin
,
INA226_ADDRESS
<<
1
);
i2c_write_byte
(
sda
_pin
,
scl_pin
,
INA226_REG_CONFIG
);
i2c_write_byte
(
sda
_pin
,
scl_pin
,
config
>>
8
);
i2c_write_byte
(
sda
_pin
,
scl_pin
,
config
&
0xFF
);
i2c_stop
(
sda
_pin
,
scl_pin
);
i2c_start
(
sda
,
scl
);
i2c_write_byte
(
sda
,
scl
,
INA226_ADDRESS
<<
1
);
i2c_write_byte
(
sda
,
scl
,
INA226_REG_CONFIG
);
i2c_write_byte
(
sda
,
scl
,
config
>>
8
);
i2c_write_byte
(
sda
,
scl
,
config
&
0xFF
);
i2c_stop
(
sda
,
scl
);
return
true
;
}
// 校准 INA226
bool
INA226_calibrate
(
int
sda
_pin
,
int
scl_pin
,
float
rShuntValue
,
float
iMaxExpected
)
{
bool
INA226_calibrate
(
int
sda
,
int
scl
,
float
rShuntValue
,
float
iMaxExpected
)
{
currentLSB
=
iMaxExpected
/
32767
.
0
;
// 计算电流 LSB,/INA226_REG_CALIBRATION
uint16_t
calibrationValue
=
(
uint16_t
)(
0
.
00512
/
(
currentLSB
*
rShuntValue
));
i2c_start
(
sda
_pin
,
scl_pin
);
i2c_write_byte
(
sda
_pin
,
scl_pin
,
INA226_ADDRESS
<<
1
);
i2c_write_byte
(
sda
_pin
,
scl_pin
,
INA226_REG_CALIBRATION
);
i2c_write_byte
(
sda
_pin
,
scl_pin
,
calibrationValue
>>
8
);
i2c_write_byte
(
sda
_pin
,
scl_pin
,
calibrationValue
&
0xFF
);
i2c_stop
(
sda
_pin
,
scl_pin
);
i2c_start
(
sda
,
scl
);
i2c_write_byte
(
sda
,
scl
,
INA226_ADDRESS
<<
1
);
i2c_write_byte
(
sda
,
scl
,
INA226_REG_CALIBRATION
);
i2c_write_byte
(
sda
,
scl
,
calibrationValue
>>
8
);
i2c_write_byte
(
sda
,
scl
,
calibrationValue
&
0xFF
);
i2c_stop
(
sda
,
scl
);
return
true
;
}
// 读取总线电压
float
INA226_readBusVoltage
(
int
sda
_pin
,
int
scl_pin
)
{
i2c_start
(
sda
_pin
,
scl_pin
);
i2c_write_byte
(
sda
_pin
,
scl_pin
,
INA226_ADDRESS
<<
1
);
i2c_write_byte
(
sda
_pin
,
scl_pin
,
INA226_REG_BUSVOLTAGE
);
i2c_start
(
sda
_pin
,
scl_pin
);
i2c_write_byte
(
sda
_pin
,
scl_pin
,
(
INA226_ADDRESS
<<
1
)
|
1
);
uint8_t
high
=
i2c_read_byte
(
sda
_pin
,
scl_pin
,
true
);
uint8_t
low
=
i2c_read_byte
(
sda
_pin
,
scl_pin
,
false
);
i2c_stop
(
sda
_pin
,
scl_pin
);
float
INA226_readBusVoltage
(
int
sda
,
int
scl
)
{
i2c_start
(
sda
,
scl
);
i2c_write_byte
(
sda
,
scl
,
INA226_ADDRESS
<<
1
);
i2c_write_byte
(
sda
,
scl
,
INA226_REG_BUSVOLTAGE
);
i2c_start
(
sda
,
scl
);
i2c_write_byte
(
sda
,
scl
,
(
INA226_ADDRESS
<<
1
)
|
1
);
uint8_t
high
=
i2c_read_byte
(
sda
,
scl
,
true
);
uint8_t
low
=
i2c_read_byte
(
sda
,
scl
,
false
);
i2c_stop
(
sda
,
scl
);
int16_t
value
=
(
high
<<
8
)
|
low
;
return
value
*
0
.
00125
;
// 1.25mV/LSB
}
// 读取电流
float
INA226_readCurrent
(
int
sda
_pin
,
int
scl_pin
)
{
i2c_start
(
sda
_pin
,
scl_pin
);
i2c_write_byte
(
sda
_pin
,
scl_pin
,
INA226_ADDRESS
<<
1
);
i2c_write_byte
(
sda
_pin
,
scl_pin
,
INA226_REG_CURRENT
);
i2c_start
(
sda
_pin
,
scl_pin
);
i2c_write_byte
(
sda
_pin
,
scl_pin
,
(
INA226_ADDRESS
<<
1
)
|
1
);
uint8_t
high
=
i2c_read_byte
(
sda
_pin
,
scl_pin
,
true
);
uint8_t
low
=
i2c_read_byte
(
sda
_pin
,
scl_pin
,
false
);
i2c_stop
(
sda
_pin
,
scl_pin
);
float
INA226_readCurrent
(
int
sda
,
int
scl
)
{
i2c_start
(
sda
,
scl
);
i2c_write_byte
(
sda
,
scl
,
INA226_ADDRESS
<<
1
);
i2c_write_byte
(
sda
,
scl
,
INA226_REG_CURRENT
);
i2c_start
(
sda
,
scl
);
i2c_write_byte
(
sda
,
scl
,
(
INA226_ADDRESS
<<
1
)
|
1
);
uint8_t
high
=
i2c_read_byte
(
sda
,
scl
,
true
);
uint8_t
low
=
i2c_read_byte
(
sda
,
scl
,
false
);
i2c_stop
(
sda
,
scl
);
int16_t
value
=
(
high
<<
8
)
|
low
;
return
value
*
currentLSB
;
// 假设电流 LSB 为 1mA
}
\ No newline at end of file
system/sensor/INA226.h
View file @
170e1f10
...
...
@@ -11,18 +11,18 @@
#define INA226_REG_CALIBRATION (0x05)
// 初始化 INA226
bool
INA226_begin
(
int
sda
_pin
,
int
scl_pin
);
bool
INA226_begin
(
int
sda
,
int
scl
);
// 配置 INA226
bool
INA226_configure
(
int
sda
_pin
,
int
scl_pin
);
bool
INA226_configure
(
int
sda
,
int
scl
);
// 校准 INA226
bool
INA226_calibrate
(
int
sda
_pin
,
int
scl_pin
,
float
rShuntValue
,
float
iMaxExpected
);
bool
INA226_calibrate
(
int
sda
,
int
scl
,
float
rShuntValue
,
float
iMaxExpected
);
// 读取总线电压
float
INA226_readBusVoltage
(
int
sda
_pin
,
int
scl_pin
);
float
INA226_readBusVoltage
(
int
sda
,
int
scl
);
// 读取电流
float
INA226_readCurrent
(
int
sda
_pin
,
int
scl_pin
);
float
INA226_readCurrent
(
int
sda
,
int
scl
);
#endif // INA226_H
\ No newline at end of file
system/sensor/ads1115.c
0 → 100644
View file @
170e1f10
#include "ads1115.h"
#include "common.h"
int
_sda_pin
=
0
;
int
_scl_pin
=
1
;
#define ADS1115_ADDR 0x48
// I2C写寄存器
static
void
ads1115_write_register
(
uint8_t
reg
,
uint16_t
val
)
{
i2c_start
(
_sda_pin
,
_scl_pin
);
i2c_write_byte
(
_sda_pin
,
_scl_pin
,
(
ADS1115_ADDR
<<
1
)
|
0
);
i2c_write_byte
(
_sda_pin
,
_scl_pin
,
reg
);
i2c_write_byte
(
_sda_pin
,
_scl_pin
,
(
val
>>
8
)
&
0xFF
);
i2c_write_byte
(
_sda_pin
,
_scl_pin
,
val
&
0xFF
);
i2c_stop
(
_sda_pin
,
_scl_pin
);
}
// 读取转换寄存器
static
uint16_t
ads1115_read_conversion
()
{
uint16_t
result
=
0
;
i2c_start
(
_sda_pin
,
_scl_pin
);
i2c_write_byte
(
_sda_pin
,
_scl_pin
,
(
ADS1115_ADDR
<<
1
)
|
0
);
i2c_write_byte
(
_sda_pin
,
_scl_pin
,
0x00
);
i2c_start
(
_sda_pin
,
_scl_pin
);
i2c_write_byte
(
_sda_pin
,
_scl_pin
,
(
ADS1115_ADDR
<<
1
)
|
1
);
uint8_t
msb
=
i2c_read_byte
(
_sda_pin
,
_scl_pin
,
1
);
uint8_t
lsb
=
i2c_read_byte
(
_sda_pin
,
_scl_pin
,
0
);
i2c_stop
(
_sda_pin
,
_scl_pin
);
result
=
(
msb
<<
8
)
|
lsb
;
return
result
;
}
bool
ads1115_init
(
int
_sda_pin
,
int
_scl_pin
)
{
pinMode
(
_sda_pin
,
OUTPUT
);
pinMode
(
_scl_pin
,
OUTPUT
);
digitalWrite
(
_sda_pin
,
HIGH
);
digitalWrite
(
_scl_pin
,
HIGH
);
return
true
;
}
// 读取某个单端通道电压,channel = 0~3
float
ads1115_read_channel
(
int
channel
)
{
uint16_t
config
=
0
;
if
(
channel
==
0
)
config
=
0xC203
;
// MUX=100 (AIN0-GND)
else
if
(
channel
==
1
)
config
=
0xD203
;
// MUX=101 (AIN1-GND)
else
if
(
channel
==
2
)
config
=
0xE203
;
// MUX=110 (AIN2-GND)
else
if
(
channel
==
3
)
config
=
0xF203
;
// MUX=111 (AIN3-GND)
else
return
-
1
.
0
f
;
ads1115_write_register
(
0x01
,
config
);
delayMicroseconds
(
10000
);
// 等待转换
uint16_t
raw
=
ads1115_read_conversion
();
int16_t
val
=
(
int16_t
)
raw
;
float
voltage_divided
=
val
*
4
.
096
f
/
32768
.
0
f
;
//float real_voltage = val * 6.144f / 32768.0f;
// 假设分压电阻 R1=2k, R2=10k
float
real_voltage
=
voltage_divided
*
(
10
.
0
f
+
2
.
0
f
)
/
10
.
0
f
;
//无分压电阻
return
real_voltage
;
}
system/sensor/ads1115.h
0 → 100644
View file @
170e1f10
#ifndef ADS1115_H
#define ADS1115_H
#include <stdint.h>
#include <stdbool.h>
// 初始化GPIO引脚(SDA、SCL),必须先调用
bool
ads1115_init
(
int
_sda_pin
,
int
_scl_pin
);
// 读取指定通道AIN0~AIN3的电压值(单位伏特)
// 输入参数 channel: 0~3
// 返回实际电压值,负数代表错误
float
ads1115_read_channel
(
int
channel
);
#endif
\ No newline at end of file
usr/main.c
View file @
170e1f10
...
...
@@ -15,10 +15,10 @@ int main(int argc, char *argv[]) {
//printf("WiringPi setup failed!\n");
return
3
;
}
if
(
!
INA226_begin
(
sda_pin
,
scl_pin
))
{
my_zlog_fatal
(
"INA226 初始化失败!"
);
if
(
!
INA226_begin
(
sda_pin
,
scl_pin
)
&&
!
ads1115_init
(
sda_pin
,
scl_pin
)
)
{
my_zlog_fatal
(
"INA226 初始化失败
或者ads1115初始化失败
!"
);
//printf("INA226 初始化失败!\n");
return
4
;
return
4
;
}
if
(
Device_File_Init
()
!=
0
)
{
my_zlog_fatal
(
"This is a fatal message"
);
...
...
@@ -33,17 +33,17 @@ int main(int argc, char *argv[]) {
int
adino_jude
=
system
(
"pactl load-module module-alsa-source device=hw:2,0"
);
if
(
adino_jude
==
0
)
{
my_zlog_debug
(
"命令执行成功!
\n
"
);
my_zlog_debug
(
"命令执行成功!"
);
}
else
{
my_zlog_warn
(
"命令执行失败,返回状态码: %d
\n
"
,
adino_jude
);
my_zlog_warn
(
"命令执行失败,返回状态码: %d"
,
adino_jude
);
}
my_zlog_info
(
"程序初始化成功"
);
//printf("程序初始化成功\n");
system
(
"pkill chromium"
);
// 配置 INA226
if
(
!
INA226_configure
(
sda_pin
,
scl_pin
))
{
my_zlog_warn
(
"INA226初始化失败"
);
}
...
...
usr/main.h
View file @
170e1f10
...
...
@@ -16,5 +16,6 @@
#include "request.h"
#include "fileopen.h"
#include "log.h"
#include "ads1115.h"
#endif
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment