0
点赞
收藏
分享

微信扫一扫

Stm32的wifi模块概述及案例

知识点1:wifi概述

无线通信技术。

安信可的ESP01-ESP14系列模组中的ESP-12F模组,芯片是乐鑫esp8266芯片

esp8266特点:

Stm32的wifi模块概述及案例_Lua

Stm32的wifi模块概述及案例_wifi_02

知识点2:wifi开发方式

1、基于AT指令,需另接MCU,开发简单,成本略高

Stm32的wifi模块概述及案例_Lua_03

2、 基于SDK(FreeRTOS/NONOS),软件工程量大,以C语言为主,成本低,运行效率高

3、基于开源引擎,语言众多,开发效率高,运行效率略低

实现:

步骤1:下载开源引擎(固件)

NodeMCU custom builds (nodemcu-build.com)

Stm32的wifi模块概述及案例_Lua_04

步骤2:将开源引擎(固件)烧写进wifi。

Stm32的wifi模块概述及案例_Lua_05

Stm32的wifi模块概述及案例_wifi_06

Stm32的wifi模块概述及案例_wifi_07

Stm32的wifi模块概述及案例_wifi_08

知识点3:lua脚本

特点:

1、1993年来至巴西里约热内卢天主教大学的小巧脚本语言

2、 包括商业用途均开源免费

3、 目的是应用于灵活的嵌入式应用开发

4、 纯C语言写成,可以与C/C++互相调用

5、 高效、轻量级、跨平台、易移植、可扩展

6、支持面向过程、面向对象、封装、继承、复合数据结构表

7、 应用于游戏开发、脚本编程、web应用、MySQL插件、系统安全等

安装脚本环境:

sudo apt-get install lua5.2

简单使用:

Stm32的wifi模块概述及案例_Lua_09

语法:

1、注释

-- 单行注释 --[[ 多行注释 --]]

2、单双引号均可以表示字符串,如果要保留双引号外面用单引号,如果要保留单引号外面用双引号。

str = 'this is "http://www.lua.org"' print(str); str_1 = "this is 'http://www.lua.org'" print(str_1);

3、变量(可以通过type()来检查变量类型):

3.1、类型:

3.1.1、nil 空值,没有使用和初始化过的变量,都是nil。nil既是值,又是类型

3.1.2、boolean 布尔值,只有两个有效值:true和false

3.1.3、number 数值,在Lua里,数值相当于C语言的double

3.1.4、string 字符串,如果你愿意的话,字符串是可以包含"\0"字符的(这和C语言总是以"\0"结尾是不一样的)

3.1.5、table 关系表类型,这个类型功能比较强大,表达了所有构造类型tb={10,"xiaoming",{"score",100}},

3.1.6、function 函数类型,函数也是一种类型,也就是说,所有的函数,它本身就是一个变量

3.1.7、userdata 这个类型专门用来和Lua的宿主打交道的,宿主通常是用C和C++来编写的,在这种情况下,Userdata可以是宿主的任意数据类型,常用的有Struct和指针

3.1.8、thread,线程类型,Lua没有真正的线程

3.2、变量名大小写敏感,直接写变量名都是全局变量,加上local后才是局部变量,对于函数最好加上避免与全局变量混淆

3.3变量赋值

local a,b,c = 1,5,6 --一个名字后面加一个赋值就表示定义变量了,自动确定类型

4、 除了+、-、*、/,多了一个指数运算符^,和一个字符串连接运算符..

比较运算符除了<、>、>=、<=、==,改了一个不等于~=,返回值都是true和false

逻辑运算符:and、or、not,除了 nil、false 为假,其余的均为真( 0 和 空串"" 也为真

and和or返回值并不是ture或false,而是运算到哪个参数结束就返回谁

x and y:当x为false时会返回x ,当x为true时会返回y

x or y:当x为true时会返回x,当x为false时会返回y

这样就可以实现条件表达式了:x = a?b:c,在Lua中可以写成:x = a and b or c

5、判断语句,循环语句

if xxx == yyy then 执行语句 else 执行语句 end if xxx == yyy then 执行语句 elseif xxx == zzz then 执行语句 else 执行语句 end while xxx ~= yyy do --Lua中没有continue所以是否结束一次循环自己通过条件判断决定 语句 end for 变量=初值,终值,步进值 do --for中的变量是局部的,步进值不写默认为1,负的表示递减,break跳出循环 语句 end for 变量1,变量2,变量n in 表或枚举函数 do 语句 end

案例:

for i in ipairs({1,2,3,4,5}) do sum=sum+i; end print(sum); --[[for i=1,5,1 do sum=sum+i; end print(sum); while i ~= 6 do sum=sum+i; i=i+1; end print(sum);--]]

6、函数

function mymin(a,b) if a>b then print(b); else print(a); end end mymin(40,20);

7、闭包函数(函数内再定义函数)

闭包的理解:函数内定义函数就是闭包,但还没有创建闭包,如果返回被包的函数,在外面接收并使用时,那么就创建了一个闭包,被包的函数执行时,包含它的外函数资源也不会因为返回退出而释放,所以外函数中的变量会一直存在内存中,像c中的静态局部变量一样;如果被包函数不返回使用,那么外函数退出就会释放资源;被包函数可以访问外函数局部变量,闭包就是将所有上下文实例化后全部保存下来了

闭包函数 function a() return function b() -- 被包函数体 end end

8、数组下标从 1 开始,而不是 0

知识点4:wifi模块开发(重点)

案例1:(GPIO)点灯

Stm32的wifi模块概述及案例_串口_10

函数api:NodeMCU Documentation

步骤1:编写lua脚本

Stm32的wifi模块概述及案例_串口_11

Stm32的wifi模块概述及案例_wifi_12

Stm32的wifi模块概述及案例_字符串_13

--功能:点灯
--1步骤:找到引脚将引脚模式给输出(GPIO02,GPIO16)
gpio.mode(4,gpio.OUTPUT);
--2步骤:给高或者低电平
gpio.write(4,gpio.LOW);

步骤2:打开烧录软件

Stm32的wifi模块概述及案例_Lua_14

Stm32的wifi模块概述及案例_字符串_15

问题:

1、找不到串口,安装驱动。

2、打开串口时闪退,安装群里的java环境

3、打开串口之后,wifi串口输出...,需要重新烧录固件。

案例2:(softuart)软串口收发

步骤1:找软串口引脚

Stm32的wifi模块概述及案例_wifi_16

步骤2:编写lua脚本

https://nodemcu.readthedocs.io/en/latest/modules/softuart/

Stm32的wifi模块概述及案例_wifi_17

写串口:

--步骤1:配置串口
softuart_obj = softuart.setup(115200, 5, 6);
--步骤2:写串口
softuart_obj:write("Hello!")

Stm32的wifi模块概述及案例_字符串_18

读串口:

softuart_obj = softuart.setup(9600, 5, 6);
softuart_obj:on("data",5,function(data)
    softuart_obj:write(data);
end)

Stm32的wifi模块概述及案例_字符串_19

练习1:pc控制wifi的灯亮灭

led=4
gpio.mode(led,gpio.OUTPUT);
gpio.write(led,gpio.HIGH);

softuart_obj = softuart.setup(9600, 5, 6);
softuart_obj:on("data","@",function(data)
    if data == "open@" then
        gpio.write(led,gpio.LOW);
    elseif data == "close@"  then
        gpio.write(led,gpio.HIGH);
    else
        softuart_obj:write(data);
    end;

end)

Stm32的wifi模块概述及案例_wifi_20

举报

相关推荐

0 条评论