0%

简介

HardwareSerial 库是c++编写的,应用于esp32 Arduino应用环境的串口驱动库,我们在安装好ESP32的Arduino开发环境后就已经集成了这个串口操作库,在实际应用时直接引用就可以了。

注意:ESP32共有3个UART端口, 其中UART1用于Flash读/写,我们使用串口1时需要注意,需要将串口1映射到其他GPIO上即可,我测试了一下GPIO12、GPIO13,使用串口1时可以完美运行

串口名 Arduino名 TX RX
UART0 Serial pin1 pin3
UART1 Serial1 pin10 pin9
UART2 Serial2 pin17 pin16

效果演示

demo程序,将串口0接收到的数据传个串口1,再将串口1接受到的数据传输得串口0

阅读全文 »

文章前言

OpenWrt源码编译后默认的登录IP地址为192.168.1.1,往往这个IP地址跟我们现在所有的路由器IP冲突,对进入管理页面和终端造成麻烦,所以在编译之前修改掉默认的IP地址。

Lean大神的源码默认会修改IP在另一个段,为192.168.5.1,我们可以自定义修改成1.1同一个网段但是不是同一个IP,这样就解决了冲突的问题,而且也还可以便面局域网内其他设备IP地址段的问题。

上手操作

源码中关于网络的配置在config_generate这个文件里,打开终端进入源码目录用VIM或其他编辑器编辑文件:

阅读全文 »

问题

你想实现一个服务器,通过TCP协议和客户端通信。

解决方案

创建一个TCP服务器的一个简单方法是使用 socketserver 库。例如,下面是一个简单的应答服务器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from socketserver import BaseRequestHandler, TCPServer

class EchoHandler(BaseRequestHandler):
def handle(self):
print('Got connection from', self.client_address)
while True:
msg = self.request.recv(8192)
if not msg:
break
self.request.send(msg)

if __name__ == '__main__':
serv = TCPServer(('', 8888), EchoHandler)
serv.serve_forever()

在这段代码中,你定义了一个特殊的处理类,实现了一个 handle() 方法,用来为客户端连接服务。 request 属性是客户端socket,client_address 有客户端地址。 为了测试这个服务器,运行它并打开另外一个Python进程连接这个服务器:

阅读全文 »

1) openwrt的虚拟机选择NAT模式,vmware的编辑菜单中的虚拟网络编辑器里查看NAT模式的虚拟网卡的子网地址,假设是192.168.61.0
启动openwrt虚拟机,修改/etc/config/network,把lan网卡的地址设为192.168.61网段的地址

2) 参考ubuntu虚拟机的网关设置,在ubuntu机器上输入route命令,看它的默认网关设置是多少。

3) 在openwrt上添加默认网关

修改/etc/rc.local 在文件里添加命令:

1
route add default gw (your ip) 

4)设置dns:

编辑/etc/resolv.conf
增加一行

1
nameserver 8.8.8.8

5) reboot

Linux scp 命令用于 Linux 之间复制文件和目录。
scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。

语法

1
2
3
scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 [...] [[user@]host2:]file2
阅读全文 »

1、单个字符分隔用split截取

1
2
3
4
string str = "GT123_1";
string[] strArray = str.Split('_');
//输出:sArray[0]="GT123"
// sArray[1]="1"

2、利用多个字符来分隔字符串
1
2
3
4
5
6
string str = "GTAZB_JiangjBen_123";
string[] strArray = str.Split(new char[2] { 'j', '_' });
//输出:sArray[0]="GTAZB"
// sArray[1]="Jiang"
// sArray[2]="Ben"
// sArray[3]="123"

3、根据字符串或字符串组来截取字符串
1
2
3
4
5
string str = "GTAZB_JiangjBen_123";
string[] strArray = str.Split(new string[] { "Ji", "jB" }, StringSplitOptions.RemoveEmptyEntries);
//输出:sArray[0]="GTAZB_"
// sArray[1]="ang"
// sArray[2]="en_123"。

阅读全文 »

MTK的芯片设计有些让人搞不懂,非得将串口作为启动选择引脚;

MT76x8 参考其datesheet,TXD0 启动时必须为低电平,TXD1启动时必须保持高电平;

一共最多3个串口,唯独UART2不影响启动;但是UART2与 NET PORT2是复用的;使用uart2必须牺牲1个网口;

准确来说是牺牲所有网口(PORT0除外),因此MT76x8 要么作为单网口使用要么作为5网口使用,没有中间模式;这一点也比较蛋疼;

但这不是我们今天要关心的;今天只谈uart2作为启动串口;

阅读全文 »

openwrt版本为15.05.1,以mt7620为例,其他类似。

1.wifi的默认开启方式、ssid、加密方式等配置

1
`package``/kernel/mac80211/files/lib/wifi/mac80211``.sh`

2.硬件资源的配置(usb、gpio、flash等),即dts

1
`target``/linux/ramips/dts/``下文件`

3.镜像生成方式控制

1
`target``/linux/ramips/image/Makefile`
阅读全文 »