分类 云笔记 下的文章

“收集其他网站上看到的点滴内容。”

停车场车辆检测器和地感线圈的原理 - 简书
update:2021-11-3
地感线圈车辆检测器,是一种基于电磁感应原理的车辆检测器。它通常在同一车道的道路路基下埋设环形线圈,通以一定工作电流,作为传感器。当车辆通过该线圈或者停在该线圈上时,车辆本身上的铁质将会改变线圈内的磁通,引起线圈回路电感量的变化,检测器通过检测该电感量的变化来判断通行车辆状态。
Referenced from:https://www.jianshu.com/p/9b74cef717d3

车检器原理.pdf

注意事项

1、线圈材料:标准1.0平方耐高温镀锡线。

2、周围1米范围内不能有大量的金属,如井盖、雨水沟盖板等。

3、周围1米范围内不能有超过220V的供电线路。

4、作多个线圈时,线圈与线圈之间的距离要大于2米,否则会互相干扰。

5、标准3米宽马路,车辆检测器线圈的尺寸为2米长1米宽,角上做45°、10厘米长的倒角。

6、线圈与马路边的距离在50厘米左右,线圈为垂直叠加绕4~8圈,总长度在40~80米(含引出线)。

7、埋设线槽切割参数:宽度4mm、深度50-80mm,深度和宽度要均匀一致,应尽量避免忽深忽浅、忽宽忽窄的情况。

8、线圈应与道闸或控制机处于同一平衡位置。

9、线圈引出的两根线应该双绞,密度为每米不少于20结,未双绞的输出引线将会引起干扰。输出引线长度推荐不超过5米。由于探测线圈的灵敏度随引线长度的增加而降低,所以引线电缆的长度要尽可能短。

10、埋设好后,应用水泥、沥青、环氧树脂等材料将槽口密封固化。对于水泥路面上述三种材料均可使用,对于沥青石子路面可使用沥青或环氧树脂,使用沥青灌封需注意线圈。

11、切割完毕的槽内不能有杂物,尤其不能有硬物,要先清理干净。

12、车辆检测器线圈的引线槽要切割至安全岛的范围内,避免引线裸露在路面。

13、绕线圈时必须将线圈拉直,但不要绷得太紧并紧贴槽底,不要产生交错层。将线圈绕好后,将双绞好的输出引线通过引出线槽引出。

我们都知道久坐不动对健康不利,但对大多数早九晚五的上班族来说,每天连坐几个小时十分常见。

我们应该如何避免久坐不动、工作锻炼两不误呢?

迈克尔·莫斯利医生(Dr Michael Mosley)在他的播客《就一件事》(Just One Thing)中探讨了这个话题。

莫斯利医生说,只要“少坐多站”,这样一件简单、容易的事就能帮助改善健康。它可以让心跳增加、有助于新陈代谢,能让骨骼受益,它还可以改善心理健康。

但是,这其中的科学原理是什么呢?

久坐不动为什么对健康不利?

莫斯利医生首先指出,久坐不动对健康非常不利,但是大多数人都难免有这一“恶习”。以英国人为例,许多人平均每天坐着的时间超过10小时。不幸的是,久坐不动可以引起一系列健康隐患,其中包括增加心脏病、二型糖尿病风险等等。

2017年的一项研究发现,每天久坐10小时或以上的女性端粒(Telomere)更短。

端粒是存在于真核细胞线状染色体末端的一小段DNA-蛋白质复合体,具有特殊的“帽子”结构。端粒是定义老化的最佳生物标记,端粒越短,老化越严重。

英国1950年代的一项调查发现,公交汽车司机突发心脏病的机率是汽车售票员的两倍。司机90%的工作时间是坐着,而售票员则是站在车上,还要在双层巴士上下来回走动。

当然,对公交司机来说,站着工作不太可能。但是,如果工作性质允许的话,时常站起来活动一下可以为生活带来显著不同。

几年前,莫斯利医生曾参与一项试验,让办公室雇员每天多站3个小时,连续一星期。结果发现,站着工作可以提高心率,其中一名研究人员还做了一项计算称,如果连续站着办公一年,所燃烧的卡路里总合相当于跑了10个马拉松。

而且,当参与者站着办公时,血液中血糖的清除速度要比坐着时要快得多。

你可能会想,尽管每天坐着办公时间很长,但只要工作之外生活方式很健康就问题不大。莫斯利医生表示,事实并非如此。他说,新的证据显示,除非每天做40分钟中等/剧烈运动,否则无法抵消久坐不动对身体所造成的伤害。

更糟的是,如果久坐不动,实际上也降低了运动所带来的好处。莫斯利医生说,最好的办法是打断久坐不动的习惯,经常站起来活动一下。

经常站起来可能有什么好处?

英国什鲁斯伯里大学(University centre of Shrewsbury)应用运动科学教授巴克利教授(Professor John Buckley)说,跟50年前相比,现代人坐着的时间要多得多。例如,大多数人除睡眠时间以外,70-80%的时间是坐着的。

为什么坐着对健康就这么不好呢? 巴克利教授解释,坐着能让新陈代谢速度放缓。坐着时,机体所有部位都失去了刺激,从骨骼、循环到新陈代谢系统,都处于静息状态。

但人类最开始是狩猎采集者,因此,人体这部“机器”也是照此而设计的。这意味着我们每天大多数时候都应该处于移动状态,除了坐下来小憩、进食、恢复和睡觉以外。

莫斯利说,一些研究显示,久坐不动不仅跟增加二型糖尿病风险有关,还与癌症、心脏病以及中风有关。但这方面是否有有力的证据呢?

巴克利教授表示,至少在控制血糖方面,站着确实有好处,这方面的证据似乎很强。

巴克利教授介绍,他们曾进行过一些试验,让办公室和呼叫中心的雇员像平时那样坐着办公一天。

研究人员对他们的饮食进行控制,并每隔15分钟读取他们的血糖指数。次日,研究人员让他们重复同样的试验,唯一不同的是这次他们要站着办公。

在午饭后四个半小时的班上,研究人员至少跟踪读取了参与者2个小时的血糖指数后发现,虽然他们血糖指数有所上升,但幅度不大,而且下降的速度要要比坐着上班快得多,并在整个下午都保持较低水平。

为什么只要站起来就对健康有益?

巴克利教授认为,这主要与地心引力有关。他解释说,最好的方式是看一下那些关于长期卧床者的研究。

长期卧床不起会影响骨密度,从而导致骨质疏松,循环也随之下降。这一切都是因为缺少地心引力。地心引力一直作用于人,但如果躺着就减少了这种重力对人体的影响。而坐着和卧床休息相差并不太多。这一点可以从到太空执行任务的宇航员身上看得更清楚。

宇航员在进入太空前经过高强度体能训练,身体强健。他们在进入国际空间站后每天都进行2个小时高难度运动,比地面上人运动量平均高出三、四倍。

但即使这样,当他们在6个月后返回地面时,骨密度、有氧健身能力、力量以及肺功能全部出现下降迹象。

巴克利教授说,这显示了地球重力一直在作用于人体,只要站起来,就能让重力为我们工作。

怎样做到少坐多站?

巴克利教授说,我们要经常提醒自己需要站起来活动一下,比如,可以站起来接电话;如果用手机还可以边走边讲话。

他说,如果每一个小时能站起来两、三次,每次两、三分钟就会打破久坐不动的不良习惯。

杰克是一名社区经理,用他自己的话说,每天90%的工作时间都是坐着,有时一坐就是两、三个小时。

莫斯利医生建议杰克每隔一小时就站起来活动一下,每次两、三分钟就可以。杰克说,尝试在工作时中经常站起来以后,生产力更高了、精力也更旺盛了,这也给了他从办公桌旁走开一小会的机会。

即使下班回家后,他也不再像从前那样就想坐在沙发上看电视一动不动了--他还想自己动手做饭。

杰克说,少坐多站让他大获收益,现在已经养成了习惯,并绝对会继续坚持下去。

如果你只想做一件事来改善健康,何不尝试一下少坐多站呢?这一简单动作就能提升心律、减少心肌代谢疾病风险、并可能为骨骼提供保护。站立同时再结合一些小动作,增加燃脂总数,收益可能更大。

On different operation system, have different method to read/write I/O port. I
know WinIO on windows, IoWrite8/16/32 on Linux.

There is a good open source software “Open Hardware Monitor”, which develop by
C# language. It support almost all the motherboard.

  1. Datasheet of chipsLook the access channels on file NCT6776F_NCT6776D_Datasheet_V1_2
    page 275

19.2 ACCESS CHANNELS
There are two different channels to set up/access the GPIO ports. The first one is the indirect access via register
2E/2F (4E/4F, it depends by HEFRAS trapping). The registers can be read / written only when the respective
logical device ID and port number are selected.
known that rigister index is 0x2E, and data Input/Output port is 0x2F

On page 54

To program the NCT6776F / NCT6776D configuration registers, the following configuration procedures must be
followed in sequence:
(1). Enter the Extended Function Mode.
(2). Configure the configuration registers.
(3). Exit the Extended Function Mode.

7.1.1 Enter the Extended Function Mode
To place the chip into the Extended Function Mode, two successive writes of 0x87 must be applied to Extended
Function Enable Registers (EFERs, i.e. 2Eh or 4Eh).

7.1.2 Configure the Configuration Registers
The chip selects the Logical Device and activates the desired Logical Devices through Extended Function Index
Register (EFIR) and Extended Function Data Register (EFDR). The EFIR is located at the same address as the
EFER, and the EFDR is located at address (EFIR+1).
First, write the Logical Device Number (i.e. 0x07) to the EFIR and then write the number of the desired Logical
Device to the EFDR. If accessing the Chip (Global) Control Registers, this step is not required.

Secondly, write the address of the desired configuration register within the Logical Device to the EFIR and then
write (or read) the desired configuration register through the EFDR.

7.1.3 Exit the Extended Function Mode
To exit the Extended Function Mode, writing 0xAA to the EFER is required. Once the chip exits the Extended
Function Mode, it is in the normal running mode and is ready to enter the configuration mode.
Software Programming Example
The following example is written in Intel 8086 assembly language. It assumes that the EFER is located at 2Eh, so
the EFIR is located at 2Eh and the EFDR is located at 2Fh. If the HEFRAS (CR[26h] bit 6 showing the value of
the strap pin at power on) is set, 2Eh can be directly replaced by 4Eh and 2Fh replaced by 4Fh.
This example programs the configuration register F0h (clock source) of logical device 1 (UART A) to the value of
3Ch (24MHz). First, one must enter the Extended Function Mode, then setting the Logical Device Number (Index
07h) to 01h. Then program index F0h to 3Ch. Finally, exit the Extended Function Mode.

;-----------------------------------------------------
; Enter the Extended Function Mode
;-----------------------------------------------------
MOV DX, 2EH
MOV AL, 87H
OUT DX, AL
OUT DX, AL
;-----------------------------------------------------------------------------
; Configure Logical Device 1, Configuration Register CRF0
;-----------------------------------------------------------------------------
MOV DX, 2EH
MOV AL, 07H
OUT DX, AL
; point to Logical Device Number Reg.
MOV DX, 2FH
MOV AL, 01H
OUT DX, AL
; select Logical Device 1
;
MOV DX, 2EH
MOV AL, F0H
OUT DX, AL
; select CRF0
MOV DX, 2FH
MOV AL, 3CH
OUT DX, AL
; update CRF0 with value 3CH
;-----------------------------------------------
; Exit the Extended Function Mode
;----------------------------------------------
MOV DX, 2EH
MOV AL, AAH
OUT DX, AL

  1. Open Hardware MonitorHomepage
  2. code

The Open Hardware Monitor is a free open source software that monitors
temperature sensors, fan speeds, voltages, load and clock speeds of a computer.

As below, introduct how to use VC++ to monitor HW status on windows:

1). modify computer.cs,add some interface like GetFanSpeed(). if have problem , look report function .
2). set the project properity to output class library.
3). Reference VC++ use C# DLL

1.1 Analyze open-hardware-monitorUse Winbond W83627DHG-P chip as example.

A description about how to monitor hardware, see this
http://www.supermicro.com/support/faqs/faq.cfm?faq=12015

Question
I'm trying to access the Winbond 83627DHG-P IO chip on the motherboard X8SIL.
We want to use the LMsensor. Do you have the offset codes for the smbus?

Answer
Bus Type = ISAIO/SMBus
One W83627DHG-P

Windbond W83627DHG-P, Slave Address=0x2d (0x5a in 8-Bit format)

OR IndexReg=A15, DataReg=A16

Fan1 Fan Speed, Bank 0, Offset 0x29 RPM = 1350000/8/Data
Fan2 Fan Speed, Bank 5, Offset 0x53 RPM = 1350000/8/Data
Fan3 Fan Speed, Bank 0, Offset 0x28 RPM = 1350000/8/Data
Fan4 Fan Speed, Bank 0, Offset 0x3f RPM = 1350000/8/Data
Fan5 Fan Speed, Bank 0, Offset 0x2a RPM = 1350000/8/Data

CPU Voltage, Bank 0, Offset 0x20 Voltage = Data* 0.008
-12V Voltage, Bank 0, Offset 0x26 Voltage = ((Data*0.008-2.048)/(10./242.))+2.048
+12V Voltage, Bank 0, Offset 0x21 Voltage = Data* 0.008/ (10./66.2)

AVCC Voltage, Bank 0, Offset 0x22 Voltage = Data* 0.016
3.3Vcc Voltage, Bank 0, Offset 0x23 Voltage = Data* 0.016

DIMM Voltage, Bank 0, Offset 0x24 Voltage = Data* 0.008
+5V Voltage, Bank 0, Offset 0x25 Voltage = Data* 0.008/ (10./40.)
+3.3VSb Voltage, Bank 5, Offset 0x50 Voltage = Data* 0.016

VBAT Voltage, Bank 5, Offset 0x51 Voltage = Data* 0.016

CPU Temperature, Bank 1, Offset 0x50 Temperature = Data

System Temperature, Bank 2, Offset 0x50 Temperature = Data

Chassis Intrusion, Bank 0, Offset 0x42, BitMask 0x10 1 = Bad, 0 = Good
(Clear Bit: Bank 0, Offset 0x46, BitMask 0x80)

Power Supply Failure, GP23(From W83627DHG-P) 1 = Good, 0 = Bad

1.1.1 File: Hardware/LPC/LPCIO.csIO Ports

// I/O Ports
private readonly ushort[] REGISTER_PORTS = new ushort[] { 0x2E, 0x4E };
private readonly ushort[] VALUE_PORTS = new ushort[] { 0x2F, 0x4F };
Winbond, Nuvoton, Fintek

private const byte FINTEK_VENDOR_ID_REGISTER = 0x23;
private const ushort FINTEK_VENDOR_ID = 0x1934;

private const byte WINBOND_NUVOTON_HARDWARE_MONITOR_LDN = 0x0B;

private const byte F71858_HARDWARE_MONITOR_LDN = 0x02;
private const byte FINTEK_HARDWARE_MONITOR_LDN = 0x04;

private void WinbondNuvotonFintekEnter() {
Ring0.WriteIoPort(registerPort, 0x87);
Ring0.WriteIoPort(registerPort, 0x87);
}

private void WinbondNuvotonFintekExit() {
Ring0.WriteIoPort(registerPort, 0xAA);
}
ITE

private const byte IT87_ENVIRONMENT_CONTROLLER_LDN = 0x04;
private const byte IT8705_GPIO_LDN = 0x05;
private const byte IT87XX_GPIO_LDN = 0x07;
private const byte IT87_CHIP_VERSION_REGISTER = 0x22;

private void IT87Enter() {
Ring0.WriteIoPort(registerPort, 0x87);
Ring0.WriteIoPort(registerPort, 0x01);
Ring0.WriteIoPort(registerPort, 0x55);
Ring0.WriteIoPort(registerPort, 0x55);
}

private void IT87Exit() {
Ring0.WriteIoPort(registerPort, CONFIGURATION_CONTROL_REGISTER);
Ring0.WriteIoPort(valuePort, 0x02);
}
SMSC

private void SMSCEnter() {
Ring0.WriteIoPort(registerPort, 0x55);
}

private void SMSCExit() {
Ring0.WriteIoPort(registerPort, 0xAA);
}
How to get value:call ReadByte to get value:

byte id = ReadByte(CHIP_ID_REGISTER);
byte revision = ReadByte(CHIP_REVISION_REGISTER);
look at function ReadByte:

private byte ReadByte(byte register) {
Ring0.WriteIoPort(registerPort, register);
return Ring0.ReadIoPort(valuePort);
}
first, write register value to registerPort;
second, read value from valueport.

1.1.2 File: Hardware/LPC/W836XX.csHow to get value:// Hardware Monitor
private const byte ADDRESS_REGISTER_OFFSET = 0x05;
private const byte DATA_REGISTER_OFFSET = 0x06;

// Hardware Monitor Registers
private const byte BANK_SELECT_REGISTER = 0x4E;

private byte ReadByte(byte bank, byte register) {
Ring0.WriteIoPort(

 (ushort)(address + ADDRESS_REGISTER_OFFSET), BANK_SELECT_REGISTER);

Ring0.WriteIoPort(

 (ushort)(address + DATA_REGISTER_OFFSET), bank);

Ring0.WriteIoPort(

 (ushort)(address + ADDRESS_REGISTER_OFFSET), register);

return Ring0.ReadIoPort(

(ushort)(address + DATA_REGISTER_OFFSET));

}
What is the value of “address”:set value by construction

public W836XX(Chip chip, byte revision, ushort address) {
this.address = address;
this.revision = revision;
this.chip = chip;
...
}
on LPCIO.cs, found the calling code:

private const byte BASE_ADDRESS_REGISTER = 0x60;

ushort address = ReadWord(BASE_ADDRESS_REGISTER);

switch (chip) {
case Chip.W83627DHG:
case Chip.W83627DHGP:
case Chip.W83627EHF:
case Chip.W83627HF:
case Chip.W83627THF:
case Chip.W83667HG:
case Chip.W83667HGB:
case Chip.W83687THF:

superIOs.Add(new W836XX(chip, revision, address));
break;

...
}
Get temperature:private readonly byte[] TEMPERATURE_REG = new byte[] { 0x50, 0x50, 0x27 };
private readonly byte[] TEMPERATURE_BANK = new byte[] { 1, 2, 0 };

for (int i = 0; i < temperatures.Length; i++) {
int value = ((sbyte)ReadByte(TEMPERATURE_BANK[i],

TEMPERATURE_REG[i]))  0) 
value |= ReadByte(TEMPERATURE_BANK[i],
  (byte)(TEMPERATURE_REG[i] + 1)) >> 7;

float temperature = value / 2.0f;
if (temperature = -55 && !peciTemperature[i]) {

temperatures[i] = temperature;

} else {

temperatures[i] = null;

}
}
Get fan speed:call ReadByte(FAN_TACHO_BANK[i], FAN_TACHO_REG[i]) to get speed value to “count”
, then set real fan spee to array variable “fans[]“.

private readonly byte[] FAN_TACHO_REG =
new byte[] { 0x28, 0x29, 0x2A, 0x3F, 0x53 };
private readonly byte[] FAN_TACHO_BANK =
new byte[] { 0, 0, 0, 0, 5 };
private readonly byte[] FAN_BIT_REG =
new byte[] { 0x47, 0x4B, 0x4C, 0x59, 0x5D };
private readonly byte[] FAN_DIV_BIT0 = new byte[] { 36, 38, 30, 8, 10 };
private readonly byte[] FAN_DIV_BIT1 = new byte[] { 37, 39, 31, 9, 11 };
private readonly byte[] FAN_DIV_BIT2 = new byte[] { 5, 6, 7, 23, 15 };

ulong bits = 0;
for (int i = 0; i < FAN_BIT_REG.Length; i++)

bits = (bits > FAN_DIV_BIT2[i]) & 1) > FAN_DIV_BIT1[i]) & 1) > FAN_DIV_BIT0[i]) & 1));
int divisor = 1  192 && divisorBits < 7) 
    divisorBits++;
if (count < 96 && divisorBits > 0)
    divisorBits--;

newBits = SetBit(newBits, FAN_DIV_BIT2[i], (divisorBits >> 2) & 1);
newBits = SetBit(newBits, FAN_DIV_BIT1[i], (divisorBits >> 1) & 1);
newBits = SetBit(newBits, FAN_DIV_BIT0[i], divisorBits & 1);

}

Referenced from:https://matrix207.github.io/2012/12/17/monitor-hardware-status/

linux - How to identify GPIO pin numbers? Is GPIO driver loaded? - Unix & Linux Stack Exchange
update:2021-11-9
My system: CPU Version: Intel(R) Celeron(R) CPU J1900 @ 1.99GHz

At some point I figured that this implements the IT8786 Chip.

If you check your Kernel Configuration, you might find support for the IT87x family of drivers (under GPIO Drivers of course). In my case this was only enable as a Module.

Then, I loaded the module with:

sudo insmod /lib/modules/5.8.0-55-generic/kernel/drivers/gpio/gpio-it87.ko
dmesg returned the following item:

gpio_it87: Found Chip IT8786 rev 2. 64 GPIO lines starting at 0a00h
By checking /dev, gpiochip0 appeared and from there on you can use the already mentioned sysfs method if you wish so (although in retirement).

If you don't know how to relate the physical pins to the hardware, then try this:

apt-get install gpiod
Running gpioinfo returns in my case the following:

gpiochip0 - 64 lines:

    line   0:  "it87_gp10"       unused   input  active-high
    line   1:  "it87_gp11"       unused   input  active-high
    line   2:  "it87_gp12"      "sysfs"   input  active-high [used]
    line   3:  "it87_gp13"       unused   input  active-high
    line   4:  "it87_gp14"       unused   input  active-high
    line   5:  "it87_gp15"       unused   input  active-high
    line   6:  "it87_gp16"       unused   input  active-high
    line   7:  "it87_gp17"       unused   input  active-high
    line   8:  "it87_gp20"       unused   input  active-high
    line   9:  "it87_gp21"       unused   input  active-high
    line  10:  "it87_gp22"       unused   input  active-high
    line  11:  "it87_gp23"       unused   input  active-high
    line  12:  "it87_gp24"      "sysfs"   input  active-high [used]
    line  13:  "it87_gp25"       unused   input  active-high
    line  14:  "it87_gp26"       unused   input  active-high
    line  15:  "it87_gp27"       unused   input  active-high
    line  16:  "it87_gp30"       unused   input  active-high
    line  17:  "it87_gp31"       unused   input  active-high
    line  18:  "it87_gp32"       unused   input  active-high
    line  19:  "it87_gp33"       unused   input  active-high
    line  20:  "it87_gp34"       unused   input  active-high
    line  21:  "it87_gp35"       unused   input  active-high
    line  22:  "it87_gp36"      "sysfs"  output  active-high [used]
    line  23:  "it87_gp37"       unused   input  active-high
    line  24:  "it87_gp40"       unused   input  active-high
    line  25:  "it87_gp41"       unused   input  active-high
    line  26:  "it87_gp42"       unused   input  active-high
    line  27:  "it87_gp43"       unused   input  active-high
    line  28:  "it87_gp44"       unused   input  active-high
    line  29:  "it87_gp45"       unused   input  active-high
    line  30:  "it87_gp46"       unused   input  active-high
    line  31:  "it87_gp47"       unused   input  active-high
    line  32:  "it87_gp50"       unused   input  active-high
    line  33:  "it87_gp51"       unused   input  active-high
    line  34:  "it87_gp52"       unused   input  active-high
    line  35:  "it87_gp53"       unused   input  active-high
    line  36:  "it87_gp54"       unused   input  active-high
    line  37:  "it87_gp55"       unused   input  active-high
    line  38:  "it87_gp56"       unused   input  active-high
    line  39:  "it87_gp57"       unused   input  active-high
    line  40:  "it87_gp60"       unused   input  active-high
    line  41:  "it87_gp61"       unused   input  active-high
    line  42:  "it87_gp62"       unused   input  active-high
    line  43:  "it87_gp63"       unused   input  active-high
    line  44:  "it87_gp64"       unused   input  active-high
    line  45:  "it87_gp65"       unused   input  active-high
    line  46:  "it87_gp66"       unused   input  active-high
    line  47:  "it87_gp67"       unused   input  active-high
    line  48:  "it87_gp70"       unused   input  active-high
    line  49:  "it87_gp71"       unused   input  active-high
    line  50:  "it87_gp72"       unused   input  active-high
    line  51:  "it87_gp73"      "sysfs"   input  active-high [used]
    line  52:  "it87_gp74"      "sysfs"  output  active-high [used]
    line  53:  "it87_gp75"      "sysfs"   input  active-high [used]
    line  54:  "it87_gp76"      "sysfs"   input  active-high [used]
    line  55:  "it87_gp77"       unused   input  active-high
    line  56:  "it87_gp80"       unused   input  active-high
    line  57:  "it87_gp81"       unused  output  active-high
    line  58:  "it87_gp82"       unused   input  active-high
    line  59:  "it87_gp83"       unused   input  active-high
    line  60:  "it87_gp84"       unused   input  active-high
    line  61:  "it87_gp85"       unused   input  active-high
    line  62:  "it87_gp86"       unused   input  active-high
    line  63:  "it87_gp87"       unused   input  active-high

You can use the utilities of gpiod to work with the different pins. If your manufacturer has in some way indicated which GPI/O you can use, then you can related the "line" to the it87_gpXX" part, being XX the pins probably provided by the manufacturer.

A quick check can be done on the old way.

Go to /sys/class/gpio and see what gpiochip you find. The base number inside the gpiochip is the start position and the line points returned by gpioinfo the offset.

In my case I had 448 as base. If I want to reach GP81, that is line 57, so I would do this:

echo 505 > /sys/class/gpio/export
I hope this helps! It saved me from writing the Driver (By the way, the manufacturer sent me a driver but it didn't work)
Referenced from:https://unix.stackexchange.com/questions/485324/how-to-identify-gpio-pin-numbers-is-gpio-driver-loaded

《世上最美丽的离别》,为韩国tvN于2017年12月9日起播出的周末连续剧,由《Dear My Friends》洪锺灿导演执导与卢熙京作家再次合作打造。此剧讲述一位平凡的母亲在人生的最后时光里,与家人重归于好享受最后亲情的感人故事。

电影《世上最美的离别》改编自韩国作家卢熙庆的同名原著及电视剧。卢熙庆因怀念自己因癌症去世的母亲而写就这本小说中刻画了一个平凡又伟大的母亲的一生。
  母亲(裴宗玉 饰)在婆婆身患老年痴呆后辛苦照顾她15年,只身挑起家中重担,为一家人操劳不休。而丈夫(金甲洙 饰)对家事丝毫不关心,女儿爱上了有妇之夫,儿子也面临着高考的艰难形势。家庭中的每个人似乎都有各自的烦恼各自的事情。她去丈夫上班的医院看病,丈夫却因为自己是一名薪资低的医生而不愿意在工作的地方见到她;她去看上班的女儿,想约她一起吃一顿午餐,哪怕只是简单的一碗乌冬面,而女儿却忙着和情人约会,推脱她;她心疼的儿子,考上了大学一身轻松,和女朋友约会喝酒,过自己的快意生活。而她却在此时被查出患有膀胱癌,并处于癌症末期的情况下。在发现母亲即将离世时,家中每一个人的态度都发生了改变.....

磁力链

magnet:?xt=urn:btih:D5C3271E249B6AD208E398C499451599968C55CE

世上最美丽的离别 电视剧:
《世上最美丽的离别》(韩语:세상에서 가장 아름다운 이별,英语:The Most Beautiful Goodbye),为韩国tvN于2017年12月9日起播出的周末连续剧,由《Dear My Friends》洪锺灿导演执导与卢熙京作家再次合作打造。此剧讲述一位平凡的母亲在人生的最后时光里,与家人重归于好享受最后亲情的感人故事。

此剧为1996年播出的《世上最美丽的离别》重拍版,除新增的在英一角外,所有剧集角色皆与1996年版相同。

剧情简介 · · · · · ·
  仁熙(元美京 饰)的一生,是大部分韩国女性都会度过的寻常一生。和丈夫郑哲(刘东根 饰)结婚多年,夫妻两人早已如同最亲密的陌生人一般不分彼此。大女儿妍秀(崔智友 饰)的人生大事迟迟没有着落,儿子廷秀(崔珉豪 饰)连续落榜了三次,苦苦挣扎在书本和成绩之中。患有老年痴呆的婆婆(金英玉 饰)总是给仁熙惹麻烦,但仁熙依然毫无怨言的将照顾她当做是自己分内的事情。
  就是这样一个非常普通的女人,经医生诊断患上了癌症,已是晚期,留给她的时间最多还有两个月。一辈子操劳的仁熙会选择如何度过这段生命里最后的时光呢?