关于stm32与esp8266之间的通信,在前面的文章中已经介绍得差不多了,本文章主要介绍的是app inventor的制作,然后生成app二维码,最后在手机端下载app,进而实现通过WIFI局域网控制stm32开发板,当然关于stm32与esp8266之间的一些东西也会粗略讲一下。1 r: H. T9 a' _5 }* M! y- @# {4 P
本章所用到的器件如下:
7 s# T; w8 r. x. y: kSTM32F103ZET6最小系统板
2 {# K* Z& A; H. X$ p& \! tESP8266-01S模块 G d9 j# Q" x* R% p0 u' ^5 t
USB转microUSB数据线2 g! V3 z; Z& _% Q
四根杜邦线& |9 u8 b* m/ N, k; o4 D
8 s* t1 d) w g& N! W1 J
连接如下:5 O2 E8 s' ?$ C9 l8 Z
32板3.3v----------->ESP8266的3.3v0 J# E; x% r% a; ?, v, [0 r6 C: e
32板GND---------->ESP8266的GND. G' D& a8 \+ x; ]7 {
32板的PA2-------->ESP8266的RX+ h6 u9 y+ S! f5 e6 h
32板的PA3-------->ESP8266的TX
) i9 `& \" @" c0 ^& o" h8 M* [
7 [) M& f; \0 L/ e4 o, c2 Z# zstm32与esp8266通信 T3 X- s3 U) f
先附上32程序的主代码:
/ M6 C1 _% t$ W1 [8 L& ?! p- <font face="Tahoma"><font size="3"><font color="#000000">#include "stdio.h"</font></font></font>
# @# g6 _! _9 i+ k) R - <font face="Tahoma"><font size="3"><font color="#000000">#include "delay.h"</font></font></font># O6 S1 a6 a8 u# r( }' m
- <font face="Tahoma"><font size="3"><font color="#000000">#include "led.h"</font></font></font>
4 T& N. j" m5 K - <font face="Tahoma"><font size="3"><font color="#000000">#include "usart.h"</font></font></font>/ p% C2 @3 k! E# `7 M& X
- <font face="Tahoma"><font size="3"><font color="#000000">#include "serial.h"</font></font></font>! C2 F7 } a7 n( ?
- <font face="Tahoma"><font size="3"><font color="#000000">#include "esp8266.h"</font></font></font>) M+ S5 H2 ]" o( X( S: B- `8 l! q* R
- <font face="Tahoma"><font size="3"><font color="#000000">
- [! d+ v) A( Y' B+ B - </font></font></font>0 b# W* w9 |7 |' \1 T
- <font face="Tahoma"><font size="3"><font color="#000000">/* AT指令返回值的结尾没有\r\n这样的回车换行符,</font></font></font>
; A$ H3 e0 G# b5 ^ - <font face="Tahoma"><font size="3"><font color="#000000"> * 而在串口调试助手中,需要MCU输出\r\n给串口调试助手才能刷新缓冲区把字符显示出来,</font></font></font>* M, Z( e) W/ \
- <font face="Tahoma"><font size="3"><font color="#000000"> * 同时这个\r\n还起到回车换行的目的*/</font></font></font>- }) N) _) J2 V& a' q! s
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>( K% y9 t6 m: N6 }
- <font face="Tahoma"><font size="3"><font color="#000000">/* AT指令的结尾处必须是\r\n*/</font></font></font>; ?) i0 V9 k h/ P% a; m; O
- <font face="Tahoma"><font size="3"><font color="#000000">
& C G9 Z2 q: F2 V - </font></font></font>
0 Y' v2 v3 A: H+ _+ x" i% A \- X - <font face="Tahoma"><font size="3"><font color="#000000">/* serial.h中的usart1_send_usart2函数用于没有USB转TLL模块的人使用,</font></font></font>& {2 `! z; I% u8 Q$ C
- <font face="Tahoma"><font size="3"><font color="#000000"> * 此函数作用是利用串口1发送AT指令给串口2,串口2将AT指令发送给ESP8266,实现对ESP8266的AT指令配置,</font></font></font>
5 g: a! p$ T9 M - <font face="Tahoma"><font size="3"><font color="#000000"> * 当然,如果你有USB转TTL模块的话,可以直接将ESP8266与USB转TTL模块直连,然后在串口调试助手里面直接配置AT指令*/</font></font></font>/ {' T. G/ R1 u) B4 y5 T
- <font face="Tahoma"><font size="3"><font color="#000000">: L& U; M5 u% |6 _
- </font></font></font>3 k g8 `% s# g
- <font face="Tahoma"><font size="3"><font color="#000000">extern u8 esp_sipsend1[];</font></font></font>* a! w+ c1 F2 i* o; l' ^* s
- <font face="Tahoma"><font size="3"><font color="#000000">extern u8 esp_sipsend2[];</font></font></font>8 j7 w; g9 G( o
- <font face="Tahoma"><font size="3"><font color="#000000">
. K9 k6 v$ ^+ H# v1 q+ o+ }+ F4 S - </font></font></font>" L( G6 G& Q1 n; U" Q6 y9 V! Y) V- x+ d
- <font face="Tahoma"><font size="3"><font color="#000000">int main(void)</font></font></font>
7 T7 M7 g2 f4 g$ `' }$ M6 K - <font face="Tahoma"><font size="3"><font color="#000000">{ </font></font></font>
: J: ^) U. l% w+ _/ }4 _2 g b - <font face="Tahoma"><font size="3"><font color="#000000"> delay_init(); //延时函数初始化</font></font></font>
: s1 @9 c6 B8 d/ l0 I7 p$ M - <font face="Tahoma"><font size="3"><font color="#000000"> NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级</font></font></font>/ N9 ^; A$ `1 d, E9 w/ }; g
- <font face="Tahoma"><font size="3"><font color="#000000"> uart_init(115200); //串口1初始化为115200</font></font></font>- v# n- n' R. M5 m5 D1 O
- <font face="Tahoma"><font size="3"><font color="#000000"> Uart2_Init(115200); //串口2初始化为115200</font></font></font>- f9 ^; J t/ ]( f# q* }& P2 g. V
- <font face="Tahoma"><font size="3"><font color="#000000"> LED_Init(); //初始化与LED连接的硬件接口</font></font></font>
1 W8 |- ~, x$ u; `. x - <font face="Tahoma"><font size="3"><font color="#000000"> Esp8266_Init();</font></font></font>: {' q, n; Q) p: p
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>6 w) q! E/ t6 S3 ^/ K
- <font face="Tahoma"><font size="3"><font color="#000000"> while(1)</font></font></font>) t- D, ~+ Y2 S5 k) R& Y5 h5 z8 E
- <font face="Tahoma"><font size="3"><font color="#000000"> { </font></font></font>
# P; i# I& k) b8 z% v# E8 s" T! j0 B - <font face="Tahoma"><font size="3"><font color="#000000"> usart1_send_usart2(); //利用串口1发送AT指令给串口2,从而达到配置ESP8266的目的,并且让模块的返回值在串口1打印出来</font></font></font>) _( h8 n" p6 l9 l k ?
- <font face="Tahoma"><font size="3"><font color="#000000"> if(Data_Compare((u8 *)"LEDK")) //点亮板上的led</font></font></font>* }. p1 }0 E& c6 S2 p P
- <font face="Tahoma"><font size="3"><font color="#000000"> { </font></font></font>" r5 R- {6 x: F5 ^$ c. Q! I# ]. t
- <font face="Tahoma"><font size="3"><font color="#000000"> led(1); </font></font></font>* H! F7 \2 L* p
- <font face="Tahoma"><font size="3"><font color="#000000"> Clear_Buf();</font></font></font>
6 q8 j6 {- Y: s& {+ \- B' z - <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART1, (u8 *)"led is open\r\n"); </font></font></font>
/ J, s+ K$ g; N: H0 _1 ^. X - <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART2, esp_sipsend1); //利用串口2给esp8266发送AT+CIPSEND指令,告诉它下一次将发送具体数据</font></font></font>% Z. I* |( a% P. h6 r* B
- <font face="Tahoma"><font size="3"><font color="#000000"> Usart2_Receive_Data(USART1); //将串口2接收到的AT+CIPSEND指令返回的数据显示在串口1上</font></font></font>
$ a. P5 q D) l U& b - <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART2, (u8 *)"led is open\r\n"); //发送具体数据给esp8266,让他转发到app上</font></font></font>
! y: X" K+ s0 h9 ?. v% V$ ? - <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
# l) G; e: m Y6 c - <font face="Tahoma"><font size="3"><font color="#000000"> else if(Data_Compare((u8 *)"LEDG")) //关闭板上的led</font></font></font>0 p' G& `6 } [4 M+ l
- <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>4 A' y4 |, ~& `: O4 A' C
- <font face="Tahoma"><font size="3"><font color="#000000"> led(0);</font></font></font>
% n7 Y: _. S$ \" B7 M4 _ - <font face="Tahoma"><font size="3"><font color="#000000"> Clear_Buf();</font></font></font>
$ ^8 J( g' z, {$ b7 \2 L) o- v - <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART1, (u8 *)"led is close\r\n"); </font></font></font>
% Y, J6 B/ i5 n - <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART2, esp_sipsend2); //利用串口2给esp8266发送AT+CIPSEND指令,告诉它下一次将发送具体数据</font></font></font>- Y) G4 O" w- y8 i8 B1 g* `" z. M
- <font face="Tahoma"><font size="3"><font color="#000000"> Usart2_Receive_Data(USART1); //将串口2接收到的AT+CIPSEND指令返回的数据显示在串口1上</font></font></font>
$ ]; a9 g% k; R% p2 R4 B& U, b; m( O - <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART2, (u8 *)"led is close\r\n"); //发送具体数据给esp8266,让他转发到app上 </font></font></font>
7 o* v+ }+ Z' U9 c6 [1 z0 W4 e - <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>+ u7 R/ z2 o* W: R- l' Y
- <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>3 x. n* f! e2 B0 J, w6 \& X% m
- <font face="Tahoma"><font size="3"><font color="#000000">}</font></font></font>
复制代码
( |6 w) w$ f* b 此代码中的serial.h包含几个自定义函数,其函数的作用见其右边的注释,代码如下所示:
! q1 p) V/ H/ h$ y5 m0 \- <font face="Tahoma"><font size="3"><font color="#000000">#ifndef __SERIAL_H</font></font></font>/ b2 Q; O+ @7 s8 r P
- <font face="Tahoma"><font size="3"><font color="#000000">#define __SERIAL_H</font></font></font>
6 U) c& q" a) E h% q0 u1 S - <font face="Tahoma"><font size="3"><font color="#000000">#include "stdio.h" </font></font></font>
1 \* @" x) U) U* A9 ^1 i# C ^ - <font face="Tahoma"><font size="3"><font color="#000000">#include "sys.h" </font></font></font>2 ?7 o3 O6 z% }
- <font face="Tahoma"><font size="3"><font color="#000000">#include "delay.h"</font></font></font>, Z3 P- D! |* P% v1 v0 Q" K
- <font face="Tahoma"><font size="3"><font color="#000000">#include "string.h"</font></font></font>$ M7 y r2 W1 K( O( U9 b: A
- <font face="Tahoma"><font size="3"><font color="#000000">#include "usart.h"</font></font></font>7 U6 A$ A2 w8 a2 A5 B
- <font face="Tahoma"><font size="3"><font color="#000000">
2 q! n3 o; a: c% q( R/ x - </font></font></font>
4 }: j& l3 j6 j A3 ^/ H# E+ |, G% x8 D - <font face="Tahoma"><font size="3"><font color="#000000">#define tbuf 100</font></font></font>' I+ b, p" b5 y1 v5 ^
- <font face="Tahoma"><font size="3"><font color="#000000">7 i+ ~% S+ s+ P: J' o% R1 Y
- </font></font></font>
+ V$ ?7 O$ s' o2 S - <font face="Tahoma"><font size="3"><font color="#000000">void Uart2_Init(u32 bound); //初始化串口2</font></font></font>8 O4 M# k$ @% m& E0 d' t; y( Y
- <font face="Tahoma"><font size="3"><font color="#000000">void Clear_Buf(void); //清除缓冲区数据</font></font></font>5 u1 Q7 t$ D* r% N) K+ B
- <font face="Tahoma"><font size="3"><font color="#000000">void Uart_SendStr(USART_TypeDef* USARTx, u8 *s); //往某一个串口发送指定字符串</font></font></font>
& {8 i9 l, _' P9 |. d' {+ V - <font face="Tahoma"><font size="3"><font color="#000000">void Usart2_Receive_Data(USART_TypeDef* USARTx); //将串口2返回的数据发送给串口1进行显示</font></font></font>
* t* {0 A1 q8 D' ^" H X) e( G - <font face="Tahoma"><font size="3"><font color="#000000">u8 Data_Compare(u8 *p); //指定字符串与缓存数组数据进行数据比较</font></font></font>2 c3 _: b# ], [# [7 `* P
- <font face="Tahoma"><font size="3"><font color="#000000">void usart1_send_usart2(void); //利用串口1发送AT指令给串口2,从而达到配置ESP8266的目的,并且让模块的返回值在串口1打印出来</font></font></font>4 V5 ~8 \/ p' K; ~
- <font face="Tahoma"><font size="3"><font color="#000000">
, l+ l; C* A# d1 s9 ^ - </font></font></font>
& z7 R* B. c6 M3 \$ ~9 s+ u7 I - <font face="Tahoma"><font size="3"><font color="#000000">#endif</font></font></font>
复制代码 2 j. N# A) C) R- u* x
其中Usart2_Receive_Data函数是用于接收esp8266返回的数据并在串口1进行显示,因为串口2是与esp8266进行连接的,只要串口2正确发送AT指令给esp8266,esp8266都会返回响应值,由于手头上没有USB转TTL模块,只能用这种方法来观察esp8266模块的返回值。/ w) m q: U: I$ a
而usart1_send_usart2函数的作用是利用串口调试助手发送AT指令给串口1,串口1接收到数据之后,将数据通过串口2发送给esp8266模块,达到通过串口调试助手发送AT指令配置esp8266模块的目的,之所以用这种方式,其原因是手头上没有USB转TTL模块,才出此下策。, l+ Z# a5 u( z/ N" e6 G3 d4 G
假如手头上有USB转TTL模块,上面的两个函数大可不必要,直接将USB转TTL直连上esp8266模块,然后USB端插在电脑上,利用串口调试助手即可直接发送AT指令去配置esp8266模块以及显示模块的返回值。
0 H |- \. y; q+ n' Z, ]2 m4 B \( m 主函数中的Esp8266_Init函数是对esp8266进行一系列的配置,使得能够被app客户端所连接上,其详细代码如下所示:2 i9 q) l6 B6 I2 j- ~5 Q* i8 z i
$ R% Z$ e' ?; Y6 P- <font face="Tahoma"><font size="3"><font color="#000000">#include "esp8266.h"</font></font></font>
1 k) U' ?: f4 c8 {$ V - <font face="Tahoma"><font size="3"><font color="#000000">" X) p% Z( \* Y
- </font></font></font>9 ]9 a1 A# @& A" r
- <font face="Tahoma"><font size="3"><font color="#000000">u8 esp_at[] = "AT\r\n"; //握手连接指令,返回"OK"</font></font></font>: f W/ G4 M. W' B0 J1 }
- <font face="Tahoma"><font size="3"><font color="#000000">u8 esp_cifsr[] = "AT+CIFSR\r\n"; //本机IP地址查询指令</font></font></font>
4 h- P$ r. {, N- _" d) H X2 |/ c3 O8 ? - <font face="Tahoma"><font size="3"><font color="#000000">u8 esp_cipsend[] = "AT+CIPSEND=6\r\n"; //设置发送数据长度</font></font></font>
( }. U5 ^% h& ?( b& y - <font face="Tahoma"><font size="3"><font color="#000000">u8 esp_test[] = "sunny\r\n"; //数据内容</font></font></font>
# k1 S3 M9 S0 D, z- r6 A - <font face="Tahoma"><font size="3"><font color="#000000">u8 esp_rst[] = "AT+RST\r\n"; //软件复位</font></font></font>% Y0 Y" \/ c7 q9 R" d
- <font face="Tahoma"><font size="3"><font color="#000000">u8 esp_cwmode[] = "AT+CWMODE=2\r\n"; //设置ESP8266的工作模式2(AP模式,WIFI模块作为热点),返回"OK"或者"no change"</font></font></font>
, N' K/ j1 m* m2 y/ C - <font face="Tahoma"><font size="3"><font color="#000000">u8 esp_cwsap[] = "AT+CWSAP="ESP8266_TEST","1234567890",1,4\r\n";//设置WIFI的名称、密码、通道号、加密方式(4-WPA_WPA2_PSK)</font></font></font>
' E& _, K, V* }3 s. ~' { - <font face="Tahoma"><font size="3"><font color="#000000">u8 esp_cipmux[] = "AT+CIPMUX=1\r\n"; //打开多连接 </font></font></font>* B& q& P) m( X
- <font face="Tahoma"><font size="3"><font color="#000000">u8 esp_cipserver[] = "AT+CIPSERVER=1,8080\r\n"; //建立TCP服务器,开放端口8080,端口号可以改成其他的例如8086等等</font></font></font>$ X0 P F2 k3 R7 j2 g) }4 ]
- <font face="Tahoma"><font size="3"><font color="#000000">u8 esp_cipsto[] = "AT+CIPSTO=2880\r\n"; //设置服务器超时时间为2880s,也就是连接服务器过程中可以等待的时间</font></font></font>
9 Z/ `& W* I: o1 R9 X6 m - <font face="Tahoma"><font size="3"><font color="#000000">
N% g: @8 R$ `, _# L# X - </font></font></font>& _+ M1 g' x0 _/ U2 {. f
- <font face="Tahoma"><font size="3"><font color="#000000">extern u8 RX_num; //接收计数变量</font></font></font>
$ d8 V: \4 r1 i3 ?; q - <font face="Tahoma"><font size="3"><font color="#000000">extern u8 RX_buffer[tbuf];</font></font></font>- c4 `: T/ K4 O' I
- <font face="Tahoma"><font size="3"><font color="#000000">3 w# L/ l9 f5 V. [% b, H8 y9 W
- </font></font></font>
& E, o5 T1 s2 v - <font face="Tahoma"><font size="3"><font color="#000000">void Esp8266_Init(void)</font></font></font>8 k1 W9 N- I6 }+ t
- <font face="Tahoma"><font size="3"><font color="#000000">{</font></font></font>. ?; i0 G4 ?7 _+ p4 u/ w
- <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART2, esp_cwmode); //设置ESP8266的工作模式2 AP,返回"OK"或者"no change"</font></font></font>
" d9 q C5 _, |' n/ q - <font face="Tahoma"><font size="3"><font color="#000000"> Usart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示</font></font></font>: ?, J" E4 N; t4 Y# b ?
- <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART1, (u8 *)"\r\nOK,set mode as AP with ESP8266!\r\n----------\r\n");</font></font></font>) D7 p! F4 Y, K; @8 V
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
: I- F7 y. u- s$ v8 ]6 @ - <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART2, esp_rst); //设置ESP8266的工作模式后需要复位以生效该模式</font></font></font>
: B) a+ t6 m/ Q4 K" _1 ~ - <font face="Tahoma"><font size="3"><font color="#000000"> Usart2_Receive_Data(USART1); //复位后可能会返回一堆乱码</font></font></font>7 Q1 ]( z4 p \# [! N
- <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART1, (u8 *)"\r\nOK,set RST success!\r\n----------\r\n");</font></font></font># H, N% Q8 g/ j0 |
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
5 r" W; p* D, A1 o6 M8 \ - <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART2, esp_cwsap); //设置WIFI的名称及密码</font></font></font>
9 r/ r4 I% k: |; m. k# i - <font face="Tahoma"><font size="3"><font color="#000000"> Usart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示</font></font></font>: X. v1 f( ~+ N: r
- <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART1, (u8 *)"\r\nOK,set cwsap success!\r\n----------\r\n");</font></font></font>' y/ {- |' p1 h* S; q6 Q
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
: l; `* w) r' _8 o I; y! s/ p. _ - <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART2, esp_cipmux); //设置多连接(多路连接模式)</font></font></font>; f. W u- O9 k9 A
- <font face="Tahoma"><font size="3"><font color="#000000"> Usart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示</font></font></font>9 \" v' H9 s2 n
- <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART1, (u8 *)"\r\nOK,set cipmux success!\r\n----------\r\n");</font></font></font>- O+ l# a% x$ P3 b4 M' R# n6 K
- <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
" u4 v: p) [" M1 L - <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART2, esp_cipserver); //设置wifi模块为TCP服务器模式,并配置端口为8080</font></font></font>
9 q/ K' T% \( H% u. a) D - <font face="Tahoma"><font size="3"><font color="#000000"> Usart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示</font></font></font>( H' ]5 S6 W/ x( b2 T) u+ q( J ~+ z
- <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART1, (u8 *)"\r\nOK,set server success!\r\n----------\r\n");</font></font></font>
' c" K/ q+ Z2 _ - <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
9 k C) ]: B+ S4 r" {2 T - <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART2, esp_cipsto); //设置服务器超时时间为2880s</font></font></font>7 [" `2 k$ A6 }( E L; U4 g: B
- <font face="Tahoma"><font size="3"><font color="#000000"> Usart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示</font></font></font>
: b2 y0 c R/ w& P7 D& B/ e - <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART1, (u8 *)"\r\nOK,set cipsto success!\r\n----------\r\n");</font></font></font>
7 E# E F( |4 P+ G; h; K7 I, f - <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>: P$ i+ C8 a1 N3 G
- <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART2, esp_cifsr); //获取本机IP地址</font></font></font>/ N: Q6 L( n$ T- j% G
- <font face="Tahoma"><font size="3"><font color="#000000"> Usart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示</font></font></font>0 l% T3 p6 m1 Y' Z
- <font face="Tahoma"><font size="3"><font color="#000000"> Uart_SendStr(USART1, (u8 *)"\r\nOK,get ip address success!\r\n----------\r\n");</font></font></font>% Q7 b3 A6 @) j- c! b$ u6 @
- <font face="Tahoma"><font size="3"><font color="#000000">}</font></font></font>
复制代码
* H' W+ A& v% a- [: J 至于其中的AT指令,网上随便找一下都有一大堆关于AT指令的详细解释,这里就不再过多解释,而其他的函数,也没有什么好讲的,至此,stm32代码部分就到这里了。. \1 |1 T0 o( y
% O7 K; q0 C. J移动端app制作、生成、控制
2 u0 m6 Z6 k; [3 p 接着进行app的设计,本章app的设计采用的是app inventor。2 ^( w$ n7 \' F+ Q: ^' T. E
APP INVENTOR由谷歌实验室开发,后移交麻省理工学院,是一款可视化编程环境,采用搭积木的方式快速建立应用程序,并且可以结合AI伴侣,极其便利的在手机上进行测试和应用。
% ?: C1 ]( R* i: H) k# f5 u" n APP INVENTOR是完全基于网页的在线编程工具,国内外都有一些可用的服务器。
4 P8 E. b0 R) |2 n6 G3 Z
3 P5 R9 ?+ w8 u. F( x% K! A$ e" ]. H
' O' v% N7 J' f, n- i
& T3 c5 _( R9 z4 b6 x; x3 A 可以用QQ登录,登录后创建项目就可以进入编程界面。: O P; @/ c |/ c' @# ]% t
$ m e3 j1 M- L: }4 M2 W. `! G. T% C7 w, k( u
" J5 u/ p' J. r2 a j 中间显示的就是手机屏幕,通过拖拽工具到手机屏幕,就可以开始编程了,目前只支持Android手机。
) J& B V4 p/ V* u+ E# R4 G 为了便于编程调试可以在手机上安装AI伴侣,下载地址可以通过点击菜单栏 帮助->AI伴侣信息 打开下载帮助页。 O6 w0 R; |0 F
————————————————0 t6 t5 y! y& L6 G
版权声明:i土豆" \4 g! i4 S; |& F
$ X# U N0 h4 ]: ^: t' d
2 }' @8 H9 S0 S5 i
|