//TODO
1.树莓派和红外阵列通信
#coding=utf-8
from modbus_rtu import ModbusRtu
from serialto485 import SerialTo485
import time
import serial
# import numpy as np
class Infrared:
def __init__(self, slave_address=0x03, read_length=19):
self.slave_address = slave_address
self.read_length = read_length
self.ser = serial.Serial(port='/dev/ttyAMA0', baudrate=38400, parity=serial.PARITY_ODD, timeout=0.3)
self.command_485 = [self.slave_address, 0x03, 0x00, 0x00, 0x00, 0x07]
self.modbus = ModbusRtu()
self.person = 0
self.ir_array = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
def get_data(self):
print('----start--------')
print('address', self.slave_address)
send_data = self.modbus.add_crc(self.command_485)
# while(1):
# self.ser.write([0x55, 0x3f, 0x55, 0x3f])
# print(send_data)
# a = [1, 3, 0, 0, 0, 2, 196, 11] #测试数据
n = self.ser.write(send_data)
# print('data length', n)o
if n != len(send_data): print("====================Write Fail==============")
while 1:
get_str = self.ser.read(self.read_length)
if len(get_str) == self.read_length: # 长度一样
data = []
for i in get_str:
data.append(ord(i))
if self.modbus.check_crc(data):
self.person = data[4]
for i in range(16):
if i < 8:
self.ir_array[i // 4][i % 4] = (data[9] & (1 << i)) >> i
else:
self.ir_array[i // 4][i % 4] = (data[10] & (1 << (i - 8))) >> (i - 8)
# print('here')
print('person', self.person)
print('ir_array', self.ir_array)
print(bin(data[5]), bin(data[6]), bin(data[7]), bin(data[8]))
print(bin(data[9]), bin(data[10]))
time.sleep(0.1)
break
else:
print("==================FAIL=============================", len(get_str))
# time.sleep(0.001)
n = self.ser.write(send_data)
if n != len(send_data): print("====================Write Fail2==============")
# time.sleep(0.0001)
# get_str = self.ser.read(self.read_length)
# self.number_of_person
# for i in get_str:
# print(ord(i))
print('-----------------')
# print('number of person', ord(get_str[4]))
# return get_str
class ModbusRtu:
def __init__(self):
print('modbus')
pass
def add_crc(self, input_data):
data = input_data[:]
crc = self.crc_cal(data)
data.append(crc & 0xff)
data.append(crc >> 8)
return data
def check_crc(self, get_data):
data = get_data
crc = self.crc_cal(data[:-2])
if data[-1] == crc >> 8 and data[-2] == crc & 0xff:
return True
return False
@staticmethod
def crc_cal(data):
crc = 0xFFFF
for pos in data:
crc ^= pos
for i in range(8):
if (crc & 1) != 0:
crc >>= 1
crc ^= 0xA001
else:
crc >>= 1
return crc
import serialto485
from Infrared_array_sensor import Infrared
import modbus_rtu
import time
if __name__ == '__main__':
infrared1 = Infrared(1)
# infrared2 = Infrared(3)
while 1:
infrared1.get_data()
# infrared2.get_data()
# infrared.get_human_coordinates()
# infrared.get_exist_absence_data()
# infrared.get_moving_directions()
# infrared.get_temperatur_data()
time.sleep(1)
2.pycharm破解
参考这个
https://blog.csdn.net/fantasic_van/article/details/89282100
3.pycharm远程写代码
https://blog.csdn.net/lin_danny/article/details/82185023
4.ssh远程管理代码
5.winSCP传输文件
6.modbus crc校验
def crc_cal(data):
crc = 0xFFFF
for pos in data:
crc ^= pos
for i in range(8):
if (crc & 1) != 0:
crc >>= 1
crc ^= 0xA001
else:
crc >>= 1
return crc
7.crc是什么
https://www.bilibili.com/video/av63987698?from=search&seid=13158338419197751915
8.树莓派串口没有奇偶校验,映射到蓝牙
树莓派默认的串口,不可以设置奇偶校验
https://blog.csdn.net/lu2631605872/article/details/90406571
9.ord
将字母转换为对应的ascii码
10.pycharm快捷键
按住ctrl,再用鼠标点函数,就会直接跳转
11.硬件调试方法(分步)
调试uart
1)将树莓派发出的串口数据,接到uart转usb,看数据对不对
2)用uart转usb模块,将上位机数据发给红外阵列,看回传
3)将树莓派和红外阵列传感器相连,读取数据
12.modbus的地址重启才会生效
红外阵列传感器通过拨码开关选择地址,但是红外阵列地址要断电之后才会生效。
13.通信协议学习方法
14.matlab解方程组
%% 读取excel
a=xlsread('desk_data.xlsx');
disp(a)
%% 计算坐标
x=zeros(1,19);
y=zeros(1,19);
for i = 1:26
syms y x
x1=a(i,2);
y1=a(i,3);
h1=a(i,4);
d1=a(i,5);
x2=a(i,6);
y2=a(i,7);
h2=a(i,8);
d2=a(i,9);
[x,y]=solve([(x-x1)^2+(y-y1)^2+h1^2==d1^2,(x-x2)^2+(y-y2)^2+h2^2==d2^2],[x,y]);
disp(i)
disp('x')
disp(vpa(x,4))
disp('y')
disp(vpa(y,4))
%disp('x',vpa(x,4),'y',vpa(y,4))
end
%%