zoukankan      html  css  js  c++  java
  • GPRS(Air202) Lua开发: GPIO输出高低电平

    开发板原理图

     

     

    新建一个GpioOut.lua文件

     控制GPIO2输出高电平

    module(...,package.seeall)  --固定写法,具体百度lua文件加载(初学者不需要考虑,直接写上这句话即可),这些只是规定的语法而已
    
    require"pins" --加载官方提供的pins文件
    
    
    --调用pins文件里面的函数控制GPIO2输出高电平
    pins.setup(pio.P0_2,1)

    提醒: pins.setup(pio.P0_2,1)

    函数是调用的 pins文件里面的  setup函数

    咱们具体看一下pins里面的函数

    1.第一个参数解释:

    如果设置GPIO0 - GPIO31管脚,则第一个参数填写 pio.P0_0 - pio.P0_31

    如果要设置GPIO32以上的管脚,则变了下

    假设设置GPIO32   则填写  pio.P1_0

    假设设置GPIO33   则填写  pio.P1_1

    .

    .

    .

    依次类推

    咱控制的引脚是GPIO2,所以填写的是 pio.P0_2

    2.第二个参数解释:

    如果设置输出高低电平,则:填写1(输出高电平) ;填写0(输出低电平)

    咱们设置输出高电平所以填写的  1

    如果填写的是nil (空),则认为是配置引脚为输入

    具体是上拉输入/下拉输入/高阻态,由第三个参数决定

    如果填写的是一个函数,则认为是配置为中断

    具体参考后面的教程

    3.第三个参数解释:

    第三个参数是设置引脚是上拉输入/下拉输入/高阻态,

    实际上当第二个参数设置为 nil (输入模式)

    或者第二个参数设置为 function (函数)

    的时候,第三个参数可以设置一下默认的状态

    第三个参数可以不填!

    具体看后面的教程!

    4.返回值

    首先要明确,返回的是一个函数

    调用函数  XXXX();

    假设程序是 Relay1 =  pins.setup(pio.P0_2,1);  (设置GPIO2输出高电平)

    后期设置输出高低电平可以这样:

    Relay1(0);  --设置GPIO2输出低电平

    注:这是官方说的...官方底层就是这样做的,千万别纠结于为啥可以这样

    你要是参与了合宙的模块的开发,你自己就这样规定的,你还会问为什么嘛??

    底层就是这样做的而已,不必纠结!

    如果你纠结,说明你C语言的指针学的不咋地!!!!

    C语言返回函数指针,然后调用而已!

    如果你真的纠结这个,你就去自己嵌入lua开发吧

    https://www.cnblogs.com/yangfengwu/p/9315841.html

    知识都是相通的,如果你学习一门新语言感觉费劲,说明你没有一门精通的语言!

     

    新建一个main.lua文件

    官方做的默认是加载main.lua 这样文件

    所以必须有这个文件

    文件内容如下:

    --必须在这个位置定义PROJECT和VERSION变量
    --PROJECT:ascii string类型,可以随便定义,只要不使用,就行
    --VERSION:ascii string类型,如果使用Luat物联云平台固件升级的功能,必须按照"X.X.X"定义,X表示1位数字;否则可随便定义
    PROJECT = "GPIO_SINGLE"
    VERSION = "2.0.0"
    
    --加载日志功能模块,并且设置日志输出等级
    --如果关闭调用log模块接口输出的日志,等级设置为log.LOG_SILENT即可
    require "log"
    LOG_LEVEL = log.LOGLEVEL_TRACE
    --[[
    如果使用UART输出日志,打开这行注释的代码"--log.openTrace(true,1,115200)"即可,根据自己的需求修改此接口的参数
    如果要彻底关闭脚本中的输出日志(包括调用log模块接口和Lua标准print接口输出的日志),执行log.openTrace(false,第二个参数跟调用openTrace接口打开日志的第二个参数相同),例如:
    1、没有调用过sys.opntrace配置日志输出端口或者最后一次是调用log.openTrace(true,nil,921600)配置日志输出端口,此时要关闭输出日志,直接调用log.openTrace(false)即可
    2、最后一次是调用log.openTrace(true,1,115200)配置日志输出端口,此时要关闭输出日志,直接调用log.openTrace(false,1)即可
    ]]
    --log.openTrace(true,1,115200)
    
    require "sys"
    
    require "net"
    --每1分钟查询一次GSM信号强度
    --每1分钟查询一次基站信息
    net.startQueryAll(60000, 60000)
    
    --加载控制台调试功能模块(此处代码配置的是uart1,波特率115200)
    --此功能模块不是必须的,根据项目需求决定是否加载
    --使用时注意:控制台使用的uart不要和其他功能使用的uart冲突
    --使用说明参考demo/console下的《console功能使用说明.docx》
    --require "console"
    --console.setup(1, 115200)
    --加载硬件看门狗功能模块
    --根据自己的硬件配置决定:1、是否加载此功能模块;2、配置Luat模块复位单片机引脚和互相喂狗引脚
    --合宙官方出售的Air201开发板上有硬件看门狗,所以使用官方Air201开发板时,必须加载此功能模块
    require "wdt"
    wdt.setup(pio.P0_30, pio.P0_31)
    
    --加载网络指示灯功能模块
    --合宙官方出售的Air800和Air801开发板上的指示灯引脚为pio.P0_28,其他开发板上的指示灯引脚为pio.P1_1
    require "netLed"
    netLed.setup(true,pio.P1_1)
    --网络指示灯功能模块中,默认配置了各种工作状态下指示灯的闪烁规律,参考netLed.lua中ledBlinkTime配置的默认值
    --如果默认值满足不了需求,此处调用netLed.updateBlinkTime去配置闪烁时长
    
    --加载错误日志管理功能模块【强烈建议打开此功能】
    --如下2行代码,只是简单的演示如何使用errDump功能,详情参考errDump的api
    require "errDump"
    errDump.request("udp://ota.airm2m.com:9072")
    
    --加载远程升级功能模块【强烈建议打开此功能】
    --如下3行代码,只是简单的演示如何使用update功能,详情参考update的api以及demo/update
    --PRODUCT_KEY = "v32xEAKsGTIEQxtqgwCldp5aPlcnPs3K"
    --require "update"
    --update.request()
    
    --加载GpioOut文件
    require "GpioOut"
    
    --启动系统框架
    sys.init(0, 0)
    sys.run()

    这个main.lua你从官方随便一个demo里面拷贝过来就可以,都是一样的!

    main.lua可以说是固定的.

    由于我需要看门狗,网络指示灯

    所以打开了这两个功能

    再者程序默认调用这个main.lua

    我需要让模块调用我写的 GpioOut.lua

    所以

    然后就可以了

    下载测试

    1.首先选择自己写的main.lua 和 GpioOut.lua

     

    2.常理来讲需要添加官方的 lib

    其实咱可以直接点击下载

    软件会提示添加lib文件,咱用LuaTask版本(官方推荐)

    然后就开始下载了

    下载完成

    提醒:如果大家用的低版本的下载工具,其实没有上面这个提醒

    大家需要手动添加lib

    现象:继电器2吸合

    扩展:

    --Relay_P02 =  pins.setup(pio.P0_2,1)
    --以后控制可以使用 Relay_P02 函数控制GPIO输出高低电平
    --控制GPIO2输出低电平:   Relay_P02(0)
    --控制GPIO2输出高电平:   Relay_P02(1)
    
    
    --Relay_P04 =  pins.setup(pio.P0_4,1)
    --以后控制可以使用 Relay_P04 函数控制GPIO输出高低电平
    --控制GPIO4输出低电平:   Relay_P04(0)
    --控制GPIO4输出高电平:   Relay_P04(1)

  • 相关阅读:
    递归函数及Java范例
    笔记本的硬盘坏了
    “References to generic type List should be parameterized”
    配置管理软件(configuration management software)介绍
    WinCE文件目录定制及内存调整
    使用Silverlight for Embedded开发绚丽的界面(3)
    wince国际化语言支持
    Eclipse IDE for Java EE Developers 与Eclipse Classic 区别
    WinCE Heartbeat Message的实现
    使用Silverlight for Embedded开发绚丽的界面(2)
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/12945400.html
Copyright © 2011-2022 走看看