认识 ESP8266—ESP-01S (含AT指令)
认识 ESP8266(ESP-01S)
文章目录
- 认识 ESP8266(ESP-01S)
- 前言
- ESP8266(ESP-01S) 简介
- ESP8266 的 AT指令
- AP/STA模式
- TCP/UDP/透传
- TCP
- UDP
- 透传
- 固件
- 实物图片
- 连接方式
- 上电:正常工作验证
- AP 模式
- 1. 建立 AP
- (1)重启模块
- (2)设置模块
- (3)配置 AP 参数
- (4)查看已接入设备的 IP
- (5)查询本机 IP 地址
- 2. Server 方法收发
- (1)开启多连接模式
- (2)创建服务器
- (3) 设置服务器超时时间
- (4) 建立客户端
- (5) 查看当前连接
- (6) 向某个连接发送数据
- 3. Client 方法收发
- (1) 创建服务器
- (3) 建立 TCP 连接
- (4) 向服务器发送数据
- STA模式
- 1.建立 STA
- 2. Server 方法收发
- (1)开启多连接模式
- (2)创建服务器
- (3) 设置服务器超时时间
- (4) 建立客户端
- (5) 查看当前连接
- (6) 向某个连接发送数据
- 3. Client 方法收发
- (1) 创建服务器
- (2) 开启多连接模式
- (3) 建立 TCP 连接
- (4) 向服务器发送数据
前言
了解完本文内容,可以去观看我的另一篇文章-----》 STM32—通过HC05配置ESP8266(ESP01s)获取时间和天气
ESP8266(ESP-01S) 简介
ESP8266 是串口型 WIFI,速度比较低,不能用来传输图像或者视频这些大容量的数据,主要应用于数据量传输比较少的场合,比如温湿度信息,一些传感器的开关量等。
ESP8266 的 AT指令
AT指令是应用于终端设备与PC应用之间的连接与通信的指令,说白了,AT指令就是大家定义好的,能表达特殊意义的字符串,每条AT命令中只能包含一条AT指令,就比如说A发送:“吃饭了”,B就会回复:“好的”。
AT指令用法:
测试命令(Test Command)
- 仅仅发送指令 “AT” 即测试ESP8266模块是否准备好,若准备好则响应“OK”。
读取命令(Read Command)
- 在AT指令后面加上“=?”即构成测试命令。例如“AT+MODE?”,会列举当前是什么模式。
执行命令(Execute Command)
- 在AT指令后面加上“=”再接上相应的参数即可,例如“AT+MODE=NORMAL”,将当前模式设置为正常模式。对于一些没有参数的指令则不需要加参数, 比如”AT+RESET”。
AP/STA模式
ESP8266为一个WiFi透传模块,和蓝牙透传模块具有主从两种工作模式一样,也具有两种工作模式:STA模式(Station)和AP模式(Access Point),一般WiFi模块还会有一个STA+AP模式,即可以在两种模式下切换的状态。
AP模式下,WiFi模块产生热点,提供无线接入服务,允许其它无线设备接入,提供数据访问,一般的无线路由/网桥工作在该模式下。该模式对应TCP传输协议中的服务端(TCP Server)。
STA模式下,WiFi模块为连接到无线网络的终端(站点),可以连接到AP,一般无线网卡工作在STA模式下。该模式对应TCP传输协议中的客户端(TCP Client)。
TCP/UDP/透传
TCP
TCP是一种面向连接的,提供可靠交付服务和全双工通信的,基于字节流的端到端的传输层通信协议。
- TCP在传输数据之前必须先建立连接,数据传输结束后要释放连接。
- 每一条TCP连接只能有2个端点,故TCP不提供广播或多播服务。
- TCP提供可靠交付,通过TCP连接传输的数据,无差错、不丢失、不重复、并且按序到达。
- TCP是面向字节流的。虽然应用进程和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。TCP并不知道所传输的字节流的含义。
UDP
UDP是一种无连接的,尽最大努力交付的,基于报文的端到端的传输层通信协议。
- UDP,在发送数据之前不需要建立连接。
- UDP不保证可靠交付,主机不需要位置复杂的连接状态。
- UDP是面向报文的。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的的边界,即应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。在接收端,UDP一次交付一个完整的报文。
- UDP没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低。
- UDP支持一对一、一对多、多对一和多对多的交互通信。
- UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。
透传
透传,又称透明传输,具体来说就是“输入即输出(如从WiFi模块串口输入的字符会透传到服务器端)”,数据不改变,不同协议之间的转换(如串口到WiFi、蓝牙等)由模块完成。使用者无需关心内部具体实现,因此模块对于使用者是“透明的”、似乎不存在的(因为可无视中间的实现原理)。一个高度封装的模块,应该隐藏内部实现细节,仅对外提供使用接口。
固件
固件是写入存储器中的程序,在单片机中就是写到Flash中的程序。
实物图片
连接方式
先说USB转TTL与esp8266的接法
USB转TTL模块 | esp8266 |
---|---|
RXD | TX |
TXD | RX |
GND | GND |
3.3V | 3.3V |
VCC | EN |
说明:
1.TXD发送引脚、RXD接收引脚,发送对接收,所以USB转TTL与esp8266的RXD、TXD交叉相接。
2.3.3V相接后可能无法启动esp8266,这是因为USB转TTL的3.3V引脚并没有真的达到3.3V,不要慌直接将esp8266的3.3V引脚接入USB转TTL的5V引脚,如果esp8266突然就发热并且烫的无法触摸,立马拔掉,如果说温度你的触感还能接受,那就没问题,毕竟牛X的esp8266没那么脆弱。
3.esp8266的EV引脚有些可能会标注成CH_PD,不要怕功能一样的,接线方式也是一样的
上电:正常工作验证
本模块(ESP01s)可以工作在三种模式:1. STA 2 .AP 3 .AP+STA
上电后,蓝色灯微弱闪烁后熄灭,红灯长亮。
初始波特率为115200
注意:发送命令的时候,勾选上“发送新行
可以使用 AT+CWMODE?
进行查询
AP 模式
1. 建立 AP
(1)重启模块
发送命令:AT+RST
(执行指令)
指令:AT+RST
响应:OK
(2)设置模块
发送命令:AT+CWMODE=3
或 AT+CWMODE=2
(设置指令)
指令:AT+CWMODE=
说明::1-Station模式,2-AP模式,3-AP兼Station模式
响应:OK
说明:需重启后生效(AT+RST)
(3)配置 AP 参数
发送命令:AT+CWSAP="ESP8266","12345678",1,3
(设置指令)
指令:AT+ CWSAP= ,,,
说明:指令只有在AP模式开启后有效
:字符串参数,接入点名称
:字符串参数,密码最长64字节,ASCII
:通道号
< ecn >:0-OPEN,1-WEP,2-WPA_PSK,3-WPA2_PSK,4-WPA_WPA2_PSK
响应:OK
刷新无线网络列表,可见到 SSID 为 ESP8266的无线网络列于其中(进行连接):
注意:此时连接网络会可能出现连接不上的情况,请发送 AT+RST 命令并等待几分钟之
后再连接
(4)查看已接入设备的 IP
连接上 ESP8266 后,发送命令:AT+CWLIF
(执行指令)
指令:AT+CWLIF
说明:查看已接入设备的 IP
响应:
OK
说明::已接入设备的 IP 地址
(5)查询本机 IP 地址
发送命令:AT+CIFSR
(执行指令)
指令:AT+CIFSR
说明:查看本模块的 IP 地址
注意:AP 模式下无效!会造成死机现象!
响应:
说明::本模块 IP 地址
但实际测试中并未发生死机现象。
查看本机配置模式:CWMODE=,为 AP 模式。
发送命令:AT+CIFSR=?
(测试指令),返回响应如下:
同样未出现死机现象。
2. Server 方法收发
(1)开启多连接模式
发送命令:AT+CIPMUX=1
(设置指令)
指令:AT+CIPMUX=
说明::0-单路连接模式,1-多路连接模式
响应:OK
(2)创建服务器
发送命令:AT+CIPSERVER=1,8080
(设置指令)
指令:AT+CIPSERVER=[,]
说明::0-关闭 server 模式,1-开启 server 模式
:端口号,缺省值为 333
响应:OK
说明:(1) AT+ CIPMUX=1 时才能开启服务器;关闭 server 模式需要重启
(2)开启 server 后自动建立 server 监听,当有 client 接入会自动按顺序占用一个连接。
开启 server 服务如下图所示
关闭 server 服务如下图所示:
打开 fireTools.exe,点击 Connect 按钮连接不上,可知 server 服务未开启
注意:服务器IP为ESP8266的IP地址AT+CIFSR
可以查询
来自野火的调试工具
链接:
https://pan.baidu.com/s/1J6oE03EcvzPqaZmM20pchQ
提取码:1234
–来自百度网盘超级会员V1的分享
重新开启 server 服务(注意:之前需要再发送一遍 AT+CIPMUX=1
以重新开启多连接模式)。
点击 Connect 按钮
连接成功后,串口收到模块返回的数据串:0,CONNECT
180S(默认值)后,连接自动断开,返回 0,CLOSED,客户端的相应按钮变成灰色。
全过程如下图:
(3) 设置服务器超时时间
发送命令 AT+CIPSTO=2880
(设置指令)
指令:AT+CIPSTO=
说明::服务器超时时间,0~2880,单位为 s
响应:OK
(4) 建立客户端
注意:服务器IP为ESP8266的IP地址
AT+CIFSR
可以查询
(5) 查看当前连接
发送命令 AT+CIPSTATUS
(执行指令)
指令:AT+CIPSTATUS
响应:STATUS: + CIPSTATUS:,,,,
OK
说明:
:连接的 id 号 0-4
:字符串参数,类型 TCP 或 UDP
:字符串参数,IP 地址
:端口号
: 0-本模块做 client 的连接,1-本模块做 server 的连接
(6) 向某个连接发送数据
发送命令 AT+CIPSEND=0,6
(设置指令) (通过上一条指令 AT+CIPSTATUS 得知 ID=0)
指令:
1)单路连接时(+CIPMUX=0),指令为:AT+CIPSEND=
2)多路连接时(+CIPMUX=1) ,指令为: AT+CIPSEND= ,
响应:
收到此命令后先换行返回”>”,然后开始接收串口数据
当数据长度满 length 时发送数据。
如果未建立连接或连接被断开,返回 ERROR
如果数据发送成功,返回 SEND OK
说明:
:需要用于传输连接的 id 号
:数字参数,表明发送数据的长度,最大长度为 2048
此时连接已建立,可以进行数据的双向收发。
3. Client 方法收发
(0) 关闭 server 服务 (如果没有开启 server 服务,可免除此步骤)
发送命令:AT+CIPSERVER=0
(设置指令)
指令:AT+CIPSERVER=[,]
说明::0-关闭 server 模式,1-开启 server 模式
:端口号,缺省值为 333
响应:OK
说明:(1) AT+ CIPMUX=1 时才能开启服务器;关闭 server 模式需要重启
(2)开启 server 后自动建立 server 监听,当有 client 接入会自动按顺序占用一个连
接。
关闭 server 服务如下图所示:
并重启AT+RST
(1) 创建服务器
查看PC端连接设备的IP
启动监听
(2) 开启多连接模式
发送命令:AT+CIPMUX=1
(设置指令)
指令:AT+CIPMUX=
说明::0-单路连接模式,1-多路连接模式
响应:OK
(3) 建立 TCP 连接
发送命令 AT+CIPSTART=0,"TCP","192.168.4.2",8080
(设置指令)
指令:1)单路连接时(+CIPMUX=0),指令为:AT+CIPSTART= ,,
2)多路连接时(+CIPMUX=1),指令为:AT+CIPSTART=,,,
响应:如果格式正确且连接成功,返回 OK,否则返回 ERROR
如果连接已经存在,返回 ALREAY CONNECT
说明::0-4,连接的 id 号
:字符串参数,表明连接类型,”TCP”-建立 tcp 连接,”UDP”-建立 UDP 连接
:字符串参数,远程服务器 IP 地址
:远程服务器端口号
如下图所示:
(4) 向服务器发送数据
发送命令 AT+CIPSEND=0,10
(设置指令)(通过上一条指令 AT+CIPSTART 设置为 ID=0)
指令:1)单路连接时(+CIPMUX=0),指令为:AT+CIPSEND=
2)多路连接时(+CIPMUX=1) ,指令为: AT+CIPSEND= , 响应:收到此命令后先换行返回”>”,然后开始接收串口数据
当数据长度满 length 时发送数据。
如果未建立连接或连接被断开,返回 ERROR
如果数据发送成功,返回 SEND OK
说明::需要用于传输连接的 id 号
:数字参数,表明发送数据的长度,最大长度为 2048
此时连接已建立,可以进行数据的双向收发。用服务器向 ESP8266 发送数据,正常。
STA模式
1.建立 STA
(1) 重启模块
发送命令:AT+RST
(执行指令)
指令:AT+RST
响应:OK
(2) 设置模块
发送命令:AT+CWMODE=3
或AT+CWMODE=1
(设置指令)
指令:AT+CWMODE=
说明::1-Station模式,2-AP模式,3-AP兼Station模式
响应:OK
说明:需重启后生效(AT+RST)
将模块设置为模式 1,此时刷新网络列表可见由 ESP8266 建立的网络从列表中消失了
(3) 查看当前无线路由器列表
发送命令:AT+CWLAP
(执行指令)
指令:AT+CWLAP
响应:正确:(终端返回AP列表)
+ CWLAP: ,,OK
错误:ERROR
说明:< ecn >:0-OPEN,1-WEP,2-WPA_PSK,3-WPA2_PSK,4-WPA_WPA2_PSK
:字符串参数,接入点名称
:信号强度
如搜索不到信号,响应:
请重新上电并严格按照 AT 命令再发送一遍。
没有列表返回的时候请耐心等待,否则会出现“busy”
(4) 加入当前无线网络
发送命令:AT+CWJAP=”MERSAIN”,”XXXXXXXX”
(设置指令)
指令:AT+CWJAP=,< pwd >
说明::字符串参数,接入点名称
:字符串参数,密码,最长64字节ASCII
响应:正确:OK
错误:ERROR
检测是否真的连上该路线网络
错误的 SSID 也可以连接上,测试后发现果然如此,输入实际不存在的账号密码返回也是 OK,
但发送 AT+CIFSR(查看模块地址),返回 ERROR,可通过此命令来判断有没有真正连接上。
发送命令:AT+CWJAP?
(查询指令)
指令:AT+CWJAP?
响应:返回当前选择的AP
+ CWJAP:
OK
说明::字符串参数,接入点名称
断电。上电后发送 AT+CWJAP?,返回同上,系统保持上次的状态。
查看模块 IP 地址
发送命令:AT+CIFSR
(执行指令)
指令:AT+CIFSR
响应:正确:+ CIFSR:
OK
错误:ERROR
说明::字符串参数,接入点名称
2. Server 方法收发
(1)开启多连接模式
发送命令:AT+CIPMUX=1
(设置指令)
指令:AT+CIPMUX=
说明::0-单路连接模式,1-多路连接模式
响应:OK
(2)创建服务器
发送命令:AT+CIPSERVER=1,8080
(设置指令)
指令:AT+CIPSERVER=[,]
说明::0-关闭 server 模式,1-开启 server 模式
:端口号,缺省值为 333
响应:OK
说明:(1) AT+ CIPMUX=1 时才能开启服务器;关闭 server 模式需要重启
(2)开启 server 后自动建立 server 监听,当有 client 接入会自动按顺序占用一个连接。
开启 server 服务如下图所示
关闭 server 服务如下图所示:
打开 fireTools.exe,点击 Connect 按钮连接不上,可知 server 服务未开启
注意:服务器IP为ESP8266的IP地址AT+CIFSR
可以查询
来自野火的调试工具
链接:
https://pan.baidu.com/s/1J6oE03EcvzPqaZmM20pchQ
提取码:1234
–来自百度网盘超级会员V1的分享
重新开启 server 服务(注意:之前需要再发送一遍 AT+CIPMUX=1
以重新开启多连接模式)。
点击 Connect 按钮
连接成功后,串口收到模块返回的数据串:0,CONNECT
180S(默认值)后,连接自动断开,返回 0,CLOSED,客户端的相应按钮变成灰色。
全过程如下图:
(3) 设置服务器超时时间
发送命令 AT+CIPSTO=2880
(设置指令)
指令:AT+CIPSTO=
说明::服务器超时时间,0~2880,单位为 s
响应:OK
(4) 建立客户端
注意:服务器IP为ESP8266的IP地址
AT+CIFSR
可以查询
(5) 查看当前连接
发送命令 AT+CIPSTATUS
(执行指令)
指令:AT+CIPSTATUS
响应:STATUS: + CIPSTATUS:,,,,
OK
说明:
:连接的 id 号 0-4
:字符串参数,类型 TCP 或 UDP
:字符串参数,IP 地址
:端口号
: 0-本模块做 client 的连接,1-本模块做 server 的连接
(6) 向某个连接发送数据
发送命令 AT+CIPSEND=0,4
(设置指令) (通过上一条指令 AT+CIPSTATUS 得知 ID=0)
指令:
1)单路连接时(+CIPMUX=0),指令为:AT+CIPSEND=
2)多路连接时(+CIPMUX=1) ,指令为: AT+CIPSEND= ,
响应:
收到此命令后先换行返回”>”,然后开始接收串口数据
当数据长度满 length 时发送数据。
如果未建立连接或连接被断开,返回 ERROR
如果数据发送成功,返回 SEND OK
说明:
:需要用于传输连接的 id 号
:数字参数,表明发送数据的长度,最大长度为 2048
此时连接已建立,可以进行数据的双向收发。
3. Client 方法收发
(0) 关闭 server 服务 (如果没有开启 server 服务,可免除此步骤)
发送命令:AT+CIPSERVER=0
(设置指令)
指令:AT+CIPSERVER=[,]
说明::0-关闭 server 模式,1-开启 server 模式
:端口号,缺省值为 333
响应:OK
说明:(1) AT+ CIPMUX=1 时才能开启服务器;关闭 server 模式需要重启
(2)开启 server 后自动建立 server 监听,当有 client 接入会自动按顺序占用一个连
接。
关闭 server 服务如下图所示:
并重启AT+RST
(1) 创建服务器
查看PC端连接设备的IP
启动监听
(2) 开启多连接模式
发送命令:AT+CIPMUX=1
(设置指令)
指令:AT+CIPMUX=
说明::0-单路连接模式,1-多路连接模式
响应:OK
(3) 建立 TCP 连接
发送命令 AT+CIPSTART=0,"TCP","192.168.0.187",8080
(设置指令)
指令:1)单路连接时(+CIPMUX=0),指令为:AT+CIPSTART= ,,
2)多路连接时(+CIPMUX=1),指令为:AT+CIPSTART=,,,
响应:如果格式正确且连接成功,返回 OK,否则返回 ERROR
如果连接已经存在,返回 ALREAY CONNECT
说明::0-4,连接的 id 号
:字符串参数,表明连接类型,”TCP”-建立 tcp 连接,”UDP”-建立 UDP 连接
:字符串参数,远程服务器 IP 地址
:远程服务器端口号
如下图所示:
(4) 向服务器发送数据
发送命令 AT+CIPSEND=0,3
(设置指令)(通过上一条指令 AT+CIPSTART 设置为 ID=0)
指令:1)单路连接时(+CIPMUX=0),指令为:AT+CIPSEND=
2)多路连接时(+CIPMUX=1) ,指令为: AT+CIPSEND= , 响应:收到此命令后先换行返回”>”,然后开始接收串口数据
当数据长度满 length 时发送数据。
如果未建立连接或连接被断开,返回 ERROR
如果数据发送成功,返回 SEND OK
说明::需要用于传输连接的 id 号
:数字参数,表明发送数据的长度,最大长度为 2048
此时连接已建立,可以进行数据的双向收发。用服务器向 ESP8266 发送数据,正常。
关注收藏不迷路
给那些看完的朋友,奖励一个 赤赤博客-后端+前端,觉得不错的话可以推荐给身边的朋友哟!
认识 ESP8266—ESP-01S (含AT指令)相关推荐
- <ESP8266>WIFI模块AT指令浅学
前言 人生如逆旅,我亦是行人. 名词解释 缩写 意思 AT(automatic transmission) 自动变速器 WiFi 无线网 AP(Access Point) 无线访问接入点,无线路由器等 ...
- esp8266(MQTT固件)通过at指令连接阿里云平台
使用记录 esp8266模组 固件烧录工具准备 串口调试助手 阿里云账户及物联网设备申请 开启MQTT通信 方式一 阿里云直接获取连接参数 方式二 阿里云三元组计算连接参数 严重注意 实验:esp82 ...
- stm32+AT指令+ESP8266接入华为云物联网平台并完成属性上报与命令响应
(示例:stm32f103c8t6+esp01s串口AT指令模式) 流程简介: 一. MQTT透传AT固件烧录 本期教程使用的是stm32+AT指令控制esp01s接入华为云联网平台完成数据上报与命令 ...
- WIFI协议及ESP8266 AT指令
一.WIFI协议. Wi-Fi(发音: /ˈwaɪfaɪ/,法语发音:/wifi/),在中文里又称作"移动热点",是Wi-Fi联盟制造商的商标作为产品的品牌认证,是一个创建于IEE ...
- esp8266 AT指令以及刷固件
AT指令是应用于终端设备与PC应用之间的连接与通信的指令.AT 即Attention.每个AT命令行中只能包含一条AT指令:ESP8266中也有众多的AT指令,可以进行测试 esp8266 模块AT测 ...
- ESP8266通过AT指令接入华为云物联网平台
1. esp8266 MQTT固件烧录 在先前如果使用Arduino开发过后的esp8266可能已经无法使用AT指令,或者出厂固件不支持全部的MQTT功能,这里我们首先对esp8266进行MQTT固件 ...
- STM32 通过 ESP8266 AT指令连接阿里云物联网平台
模组 :ESP-12F || ESP-12S || (保险来说,ESP模组的flash应该 大于4MB.或者说为32Mbit 才可以) 待补充 ... 平台 :阿里云物联网平台 MCU ...
- 通过AT指令控制ESP8266
目录 简介 1.串口无线 WIFI(COM-WIFI AP) 1.1串口无线 WIFI AP 模式,**TCP 服务器配置** 1.2.串口无线 WIFI AP 模式,**TCP 客户端配置** 1. ...
- esp8266 esp12 AT指令连接wifi热点联网,HTTP获取OneNET物联网平台消息,控制四路远程开关
esp8266 esp12 使用AT指令联网非常方便,很适合应对已经开发好的成品需要增加联网功能的需求. 使用AT指令进行开发,大多数是产品已经开发好,只需要增加小数据量的联网功能,而且不想对既有成品 ...
最新文章
- 为什么我的子线程更新了 UI 没报错?借此,纠正一些Android 程序员的一个知识误区...
- ROS与Arduino学习(三)订阅与发布
- python 怎么将数组转为列表_Python怎么将文件读入列表?
- 单片机片外程序存储器数据存储器操作命令
- Python学习:图形界面设计01
- shell 查看Linux 进程 是否存在
- 线性代数矩阵论——行列式的一些性质推论及Cramer法则
- 支持向量机(Vladimir Vapnik)
- overflow解决float浮动后高度自适应问题
- 原生JS中动态添加元素
- springboot+微信小程序基于微信小程序的高校学生疫情在校封闭管理系统毕业设计源码240904
- MySQL数据库知识的总结
- cf1504E - Travelling Salesman Problem
- 王者荣耀科技守护者密码答案是什么?最新科技守护者密码分享
- html页面用excel打印,excel怎么打印不能全部显示出来
- hiho 	大礼堂地毯(strstr 查找函数)
- 大型游戏行业网络技术解决方案
- 上海交大PMP每日一题
- 单片机、usb和串口通信
- 托福高频真词List03 // 附阅读真题
热门文章
- 全球首个可以实时互动的偶像团体,蜜枝科技能否打造出中国版“迪士尼”?丨Xtecher 观察
- 商品分类 mysql表结构_商品多级分类,数据库设计
- 分布式之cap、base理论、flp不可能原理、一致性问题、共识算法
- 抗议信用卡霸王条款,有关最低还款的注意事项
- 程序员被女朋友拉黑之后...这是我见过最“科学”的方法
- Django计算机毕业设计创意摄影交流平台python(源码程序+lw+远程部署)
- 2022buaa数据结构_1TH_1.扩展字符
- The real Jane Austen(真实的简.奥斯丁)
- 彼得·德鲁克:自我管理
- 个人记账app(一)需求设计