用于读取tcp、应用数学、格式化字符串和写入fi的python脚本

2024-06-02 18:01:44 发布

您现在位置:Python中文网/ 问答频道 /正文

在CC/C++多年之后,绝对的新手到Python。我想编写一个Python脚本来告诉我的Rasberry Pi读取智能中继板,计算温度,并将格式化字符串写入文件。经过大量的谷歌搜索和新闻组搜索,我可能已经掌握了大部分信息:

import socket

// open TCP client socket:

IPADDR = '192.168.99.9'


PORTNUM = 2101

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((IPADDR, PORTNUM))



// send command to read A/D value: two hex bytes

tdata = bytes.fromhex('FEA4')

s.send(tdata)



// receive 2-byte (hex) reply

rdata=s.recv(256)



// close socket

s.close()



// convert reply to a voltage reference (unsigned short)

vRef = (rdata[0] * 256)+(rdata[1])



// convert vref to float as degrees Farenheit

degF = vRef * 4930 / 1024

degF = degF / 10

degF = degF - 273.15

degF = degF * 9 / 5 + 32



// open text file

fo = open("\mnt\stuff\temp.txt", "w")



// write formatted string as number only e.g., 32.6

fo.write("{:+.1f}.format(degF)\n")



// Close file

fo.close()

我不确定是否要访问接收到的数据并创建无符号短值。我将得到类似于/x02/x55的值,即(2*256)+85=597。在

浮点运算,这里也不确定,但这就是我如何将597的读数转换成57.6度的F值

最后,我需要将字符串“57.6”写入一个文件。在

最后,在这段代码中,我需要一种方法让RasPi每分钟运行一次代码来更新文件。我有一个web服务器,可以读取文件并从中创建HTML文本。在

谢谢任何人的帮助。。。在


Tags: 文件to字符串sendclosebytessocketopen
1条回答
网友
1楼 · 发布于 2024-06-02 18:01:44

我会假设你的代码是正确的,我会修复你的代码:

import socket

# open TCP client socket:
IPADDR = '192.168.99.9'
PORTNUM = 2101
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((IPADDR, PORTNUM))

# send command to read A/D value: two hex bytes
tdata = bytes.fromhex('FEA4')
s.send(tdata)
# receive 2-byte (hex) reply
rdata=s.recv(256)
# close socket
s.close()

我假设您的数学基本上是正确的,但是如果您使用的是python2,那么如果rdata[0]是一个整数(类int),那么您可能正在进行楼层除法。在

^{pr2}$

为了安全起见,在进行其他计算之前,首先将vRef转换为float:

vRef = float(rdata[0] * 256)+(rdata[1])

然后继续:

# convert vref to float as degrees Farenheit
degF = vRef * 4930 / 1024
degF = degF / 10 
degF = degF - 273.15
degF = degF * 9 / 5 + 32

这个:

# open text file
fo = open("\mnt\stuff\temp.txt", "w")
# write formatted string as number only e.g., 32.6
fo.write("{:+.1f}.format(degF)\n")
# Close file
fo.close()

可替换为:

with open("\mnt\stuff\temp.txt", "w") as file:
    file.write("{:+.1f}.format(degF)\n")

关键字with将文件作为上下文管理器打开,并自动为您关闭该文件,即使您的代码引发了异常。Sockets don't work as context managers in Python 2, unless you create a wrapper for it yourself.

相关问题 更多 >