电赛培训-23-07-07

串口通信

串行vs并行

并行优点:快,效率高
缺点:需要端口多
串行优点:只需要一个端口
缺点:慢,效率低,且需要明确数据拍成一串的规则
(大端法vs小端法)

通信

串行通信每次只发送一个字节,对于字节内部发送bit的顺序,每个通讯协议都是相同的,但是字节的顺序却不一定相同,这就是大端法和小端法的区别。

I2C通信

一个通信口可以和多个设备进行传输,只需要SDA和SCL两个数据线即可,SDA为数据线,SCL为时钟线,时钟线由主设备控制,主设备为发送方,从设备为接收方,从设备的地址由主设备指定,主设备发送数据时,从设备会返回一个ACK信号,表示接收成功,如果没有返回ACK信号,主设备会认为发送失败,重新发送。
但是,I2C驱动能力较弱,需要在数据线加上拉电阻,且所有设备必须有不同地址。

SPI通信

不需要考虑地址为问题,可以一个Master带多个slave。
缺点:每多一个从机,就需要有一个IO口作为片选信号,且需要一个时钟信号,所以需要的IO口较多。

UART通信

接线非常简单,且双方对等,谁都可以随时发送信息。
缺点:容易接错,且难实现多个设备同时通信。而且功耗较大,所以很多传感器上不配备。
波特率:每个位对应时间长度的倒数
uart通信有起始位,数据位,校验位,停止位,所以每个字节需要10个bit,所以波特率为115200时,每秒可以传输11520个字节。

电平标准

usb标准:看D+和D-的电平差,差大是1,小是0
TTL电平:0v是低电平,5/3.3v是高电平
RS232电平:-3v-15v是低电平,3v15v是高电平

Arduino的uart

ttl电平5v
1为tx
0为rx
内部已通过ch340g串口转usb,与usb相连,arduino用uart串口发送信息时,会通过ch340g转换为usb信号,所以可以通过usb接收信息。
函数:

1
2
3
4
5
6
Serial.begin(baudrate):设置波特率
Serianl.print(content,选项):发送信息,可以是数字,字符串,数组,对象,选项可以是DEC,BIN,OCT,HEX,BYTE,WORD,FLOAT,STRING,可以指定发送的进制,或者发送字符串。
Serial.println(content,选项):发送信息,与print不同的是,会在最后加上换行符。
Serial.available():返回接收缓冲区中的字节数
Serial.readBytes(char类型数组名,最大读取长度)
Serial.write(char类型数组名,写入长度):总共能发送数据长度个字节。按照数组中每个原始值诸葛发送,可以借助这个功能,对struct结构体中相关数据作为一个整体,将结构体指针强制转型为byte*类型,后面数据长度用sizeof(struct),这样就可以将结构体作为一个整体发送。

Arduino的uart工具

  • 串口绘图仪:可以发送数据时利用数据名:数据的格式,将以时间为横轴,数值为纵轴,根据格式中构成的变量数量,以不同颜色的线段,随时间变化的情况进行绘图。
  • BYSerial
    串口不能同时被多个程序打开。

    网络

    基本概念:
  • TCP/IP协议:定义了设备如何连接如互联网
  • TCP:信息必须齐全的网络通信的基础
  • UDP:信息可以缺少或者需要广播的网络通信的基础
  • IP:计算机之间用于识别身份的临时位置编号
  • ICMP:网络控制信号协议
  • DHCP:动态分配ip地址协议
  • 一个能连接互联网的网课出厂自带的编号。

    ipv4

    ipv4定义了32位二进制地址
    同时,ipv4定义了一些只会用于内部网络的地址编号,称为私网ip段,剩下的都是用于全球公网ip。
    例如

10.0.0.0-10.255.255.255
172.16.0.0-172.31.255.255
192.168.0.0-192.168.255.255

ipv6

ipv6定义了128位二进制地址

子网掩码

子网掩码用于判断ip地址的前几位是网络号,后几位是主机号。
32个二进制位表示ip地址截止到哪里,只要相同就认为在同一个子网内,可以直接通信无需交给网关做转发。要求必须1卡头,连续多个1,剩下的是0。255.255.255.0对于这个设备,前面三个点分十进制数相同,那就认为是在同一个网络下,因此会直接连接而不会寻求网关。

tcp协议

传输控制协议,是面向连接的,可靠的,基于字节流的传输层通信协议,一个tcp连接需要有:

  1. 在一个网络色悲伤,特定的网络端口如8080(最好大于1023)上开创一个tcp server,这个过程叫做绑定端口,并开始监听端口。
  2. 得到该网络设备的ip地址,因此需要体现获得server的ipv4地址,以及开启tcp监听端口。

    udp协议

    无连接的传输协议,成为用户数据报协议
    udp提供了一个无需链接就能发送封装的ip数据包的方法,建立一套tcp连接需要有:
  3. 在一个网络设备上,特定的网络端口如8080(最好大于1023)上开创一个udp socket
  4. 设定好目的地IP地址和端口便可以随心所欲发送数据
  5. 目的地ip地址对应网络设备B,如果尝试在自己9090端口上开创一个udp socket,且A正好在发送信息,那么此时就能受到A发送的信息。

wifi连接

station终端

新建station

1
2
3
4
5
6
7
8
9
import network
wlan - network.WLAN(network.STA.IF)# create station
wlan.active(True)
wlan.scan() #scan for acess points(AP)
wlan.isconnected() #check if the station is connected to an AP

wlan.connect('ssid', 'key') #connect to an AP
wlan.config('mac') #get the interface's MAC address
wlan.ifconfig() #get the interface's IP/netmask/gw/DNS addresses

新建AP

1
2
3
4
5
import network
ap = network.WLAN(network.AP_IF) # create acess point interface
ap.config(ssid='ESP-AP') #set the SSID of the access point
ap.config(max_clients=10) #set how many clients can connect to the access point
ap.active(True)

tcp通讯:

  1. 连接wifi
  2. 获取本地ip
  3. 创建tcp
  4. 绑定本地ip和端口
  5. 设定最大连接数
  6. 配置tcp选项
  7. 用户进入获取用户组
  8. 读取用户信息,
  9. 发送接收到的数据给发送者

udp通讯:server

  1. 创建socket对象要设置udp模式

udp通信:client

  1. 判断wifi连接
  2. 发送使用sendto函数

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!