最近工作整理

//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


%%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值