Bladeren bron

fix:1: 修复关于wifi 多余的程序 2.增加整机开发板的TTS UI 教程

梁健 9 maanden geleden
bovenliggende
commit
a3c73c991e

+ 0 - 18
module/Air8000/demo/multi-network/Air8000_wifi_ap_eth_lan/Air8000_ap_lan.lua

@@ -15,25 +15,7 @@ httpplus = require("httpplus")
 -- 打开 CH390 供电
 gpio.setup(140, 1, gpio.PULLUP)
 
--- 通过 BOOT 按键方便刷 Air8000S
--- 定义函数 PWR8000S,用于控制 Air8000S 的 LDO 供电引脚
-function PWR8000S(val)
-    gpio.set(23, val)
-end
-
--- 加个防抖,中断后马上上报,但 1s 内只上报一次
-gpio.debounce(0, 1000)
 
--- 配置 GPIO0 为中断,默认双向触发,且启用内部下拉
-function resetAir8000S()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end
-gpio.setup(0, resetAir8000S, gpio.PULLDOWN)
 
 -- 配置 WiFi AP 功能,使得 WiFi 设备实现 4G上网
 function test_ap()

+ 0 - 13
module/Air8000/demo/multi-network/eth_wan_wifi_ap/main.lua

@@ -9,20 +9,7 @@ httpplus = require("httpplus")
 
 gpio.setup(140, 1, gpio.PULLUP)
 
--- 通过boot按键方便刷Air8000S
-function PWR8000S(val)
-    gpio.set(23, val)
-end
 
-gpio.debounce(0, 1000)
-gpio.setup(0, function()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end, gpio.PULLDOWN)
 
 function test_ap()
     log.info("执行AP创建操作")

+ 0 - 14
module/Air8000/demo/wlan/AP/main.lua

@@ -7,20 +7,6 @@ dnsproxy = require("dnsproxy")
 dhcpsrv = require("dhcpsrv")
 httpplus = require("httpplus")
 
--- 通过boot按键方便刷Air8000S
-function PWR8000S(val)
-    gpio.set(23, val)
-end
-
-gpio.debounce(0, 1000)
-gpio.setup(0, function()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end, gpio.PULLDOWN)
 
 function test_ap()
     log.info("执行AP创建操作")

+ 0 - 13
module/Air8000/demo/wlan/STA/main.lua

@@ -7,20 +7,7 @@ dnsproxy = require("dnsproxy")
 dhcpsrv = require("dhcpsrv")
 httpplus = require("httpplus")
 
--- 通过boot按键方便刷Air8000S
-function PWR8000S(val)
-    gpio.set(23, val)
-end
 
-gpio.debounce(0, 1000)
-gpio.setup(0, function()
-    sys.taskInit(function()
-        log.info("复位Air8000S")
-        PWR8000S(0)
-        sys.wait(20)
-        PWR8000S(1)
-    end)
-end, gpio.PULLDOWN)
 
 function test_ap()
     log.info("执行AP创建操作")

+ 67 - 0
module/Air8000/project/整机开发板出厂工程/user/airaudio.lua

@@ -0,0 +1,67 @@
+local airaudio = {}
+
+local i2c_id = 0            -- i2c_id 0
+
+
+local pa_pin = 162           -- 喇叭pa功放脚
+local power_pin = 164         -- es8311电源脚
+
+
+local i2s_id = 0            -- i2s_id 0
+local i2s_mode = 0          -- i2s模式 0 主机 1 从机
+local i2s_sample_rate = 16000   -- 采样率
+local i2s_bits_per_sample = 16  -- 数据位数
+local i2s_channel_format = i2s.MONO_R   -- 声道, 0 左声道, 1 右声道, 2 立体声
+local i2s_communication_format = i2s.MODE_LSB   -- 格式, 可选MODE_I2S, MODE_LSB, MODE_MSB
+local i2s_channel_bits = 16     -- 声道的BCLK数量
+
+local multimedia_id = 0         -- 音频通道 0
+local pa_on_level = 1           -- PA打开电平 1 高电平 0 低电平
+local power_delay = 3           -- 在DAC启动前插入的冗余时间,单位100ms
+local pa_delay = 100            -- 在DAC启动后,延迟多长时间打开PA,单位1ms
+local power_on_level = 1        -- 电源控制IO的电平,默认拉高
+local power_time_delay = 100    -- 音频播放完毕时,PA与DAC关闭的时间间隔,单位1ms
+local taskName = "task_tts"
+
+local play_string = "降功耗,找合宙"
+local voice_vol = 50        -- 喇叭音量
+local mic_vol = 80          -- 麦克风音量
+
+function audio_setup()
+    sys.wait(100)
+
+    i2c.setup(i2c_id,i2c.FAST)
+    i2s.setup(i2s_id, i2s_mode, i2s_sample_rate, i2s_bits_per_sample, i2s_channel_format, i2s_communication_format,i2s_channel_bits)
+
+    audio.config(multimedia_id, pa_pin, pa_on_level, power_delay, pa_delay, power_pin, power_on_level, power_time_delay)
+    audio.setBus(multimedia_id, audio.BUS_I2S,{chip = "es8311",i2cid = i2c_id , i2sid = i2s_id, voltage = audio.VOLTAGE_1800})	--通道0的硬件输出通道设置为I2S
+
+    audio.vol(multimedia_id, voice_vol)
+    audio.micVol(multimedia_id, mic_vol)
+
+end
+
+local function audio_callback(id, event)
+    local succ,stop,file_cnt = audio.getError(0)
+    if not succ then
+        if stop then
+            log.info("用户停止播放")
+        else
+            log.info("第", file_cnt, "个文件解码失败")
+        end
+    end
+    sysplus.sendMsg(taskName, MSG_PD)
+end
+
+
+function airaudio.init()
+    gpio.setup(24, 1, gpio.PULLUP)          -- i2c工作的电压域
+    sys.wait(100)
+    gpio.setup(power_pin, 1, gpio.PULLUP)   -- 打开音频编解码供电
+    gpio.setup(pa_pin, 1, gpio.PULLUP)      -- 打开音频放大器
+    audio_setup()
+    audio.on(0, audio_callback)
+end
+
+
+return airaudio

+ 31 - 99
module/Air8000/project/整机开发板出厂工程/user/airtts.lua

@@ -3,125 +3,57 @@ local airtts = {}
 local i2c_id = 0            -- i2c_id 0
 
 
-local pa_pin = 162           -- 喇叭pa功放脚
-local power_pin = 164         -- es8311电源脚
-
-
-local i2s_id = 0            -- i2s_id 0
-local i2s_mode = 0          -- i2s模式 0 主机 1 从机
-local i2s_sample_rate = 16000   -- 采样率
-local i2s_bits_per_sample = 16  -- 数据位数
-local i2s_channel_format = i2s.MONO_R   -- 声道, 0 左声道, 1 右声道, 2 立体声
-local i2s_communication_format = i2s.MODE_LSB   -- 格式, 可选MODE_I2S, MODE_LSB, MODE_MSB
-local i2s_channel_bits = 16     -- 声道的BCLK数量
-
-local multimedia_id = 0         -- 音频通道 0
-local pa_on_level = 1           -- PA打开电平 1 高电平 0 低电平
-local power_delay = 3           -- 在DAC启动前插入的冗余时间,单位100ms
-local pa_delay = 100            -- 在DAC启动后,延迟多长时间打开PA,单位1ms
-local power_on_level = 1        -- 电源控制IO的电平,默认拉高
-local power_time_delay = 100    -- 音频播放完毕时,PA与DAC关闭的时间间隔,单位1ms
-local taskName = "task_tts"
-
 local play_string = "降功耗,找合宙"
-local voice_vol = 70        -- 喇叭音量
-local mic_vol = 80          -- 麦克风音量
-
-function audio_setup()
-    pm.power(pm.LDO_CTL, false)  --开发板上ES8311由LDO_CTL控制上下电
-    sys.wait(100)
-    pm.power(pm.LDO_CTL, true)  --开发板上ES8311由LDO_CTL控制上下电
-
-    i2c.setup(i2c_id,i2c.FAST)
-    i2s.setup(i2s_id, i2s_mode, i2s_sample_rate, i2s_bits_per_sample, i2s_channel_format, i2s_communication_format,i2s_channel_bits)
+local taskName = "airtts"
 
-    audio.config(multimedia_id, pa_pin, pa_on_level, power_delay, pa_delay, power_pin, power_on_level, power_time_delay)
-    audio.setBus(multimedia_id, audio.BUS_I2S,{chip = "es8311",i2cid = i2c_id , i2sid = i2s_id, voltage = audio.VOLTAGE_1800})	--通道0的硬件输出通道设置为I2S
-
-    audio.vol(multimedia_id, voice_vol)
-    audio.micVol(multimedia_id, mic_vol)
-    sys.publish("AUDIO_READY")
-end
 
 local function audio_play()
     local result    
-    sys.waitUntil("AUDIO_READY")
-    -- 初始化spi flash, 如果是极限版TTS_ONCHIP,就不需要初始化
-    if sfud then
-        spi_flash = spi.deviceSetup(1,12,0,0,8,25600000,spi.MSB,1,0)
-        local ret = sfud.init(spi_flash)
-        if ret then
-            log.info("sfud.init ok")
-        else
-            log.info("sfud.init error", ret)
-            return
-        end
-    else
-        log.info("tts", "TTS_ONCHIP?? skip sfud")
-    end
-
     -- 本例子是按行播放 "千字文", 文本来源自wiki百科
     local fd = nil
     local line = nil
-    while true do
-        log.info("开始播放")
-        line = play_string
-        line = line:trim()
-        log.info("播放内容", line)
-        result = audio.tts(0, line)
-        if result then
-        --等待音频通道的回调消息,或者切换歌曲的消息
-            while true do
-                msg = sysplus.waitMsg(taskName, nil)
-                if type(msg) == 'table' then
-                    if msg[1] == MSG_PD then
-                        log.info("播放结束")
-                        break
-                    end
-                else
-                    log.error(type(msg), msg)
+    log.info("开始播放")
+    line = play_string
+    line = line:trim()
+    log.info("播放内容", line)
+    result = audio.tts(0, line)
+    if result then
+    --等待音频通道的回调消息,或者切换歌曲的消息
+        while true do
+            msg = sysplus.waitMsg(taskName, nil)
+            if type(msg) == 'table' then
+                if msg[1] == MSG_PD then
+                    log.info("播放结束")
+                    break
                 end
+            else
+                log.error(type(msg), msg)
             end
-        else
-            log.debug("解码失败!")
-            sys.wait(1000)
-        end
-        if not audio.isEnd(0) then
-            log.info("手动关闭")
-            audio.playStop(0)
-        end
-        if audio.pm then
-            audio.pm(0,audio.STANDBY)
         end
-        -- audio.pm(0,audio.SHUTDOWN)	--低功耗可以选择SHUTDOWN或者POWEROFF,如果codec无法断电用SHUTDOWN
-        log.info("mem", "sys", rtos.meminfo("sys"))
-        log.info("mem", "lua", rtos.meminfo("lua"))
+    else
+        log.debug("解码失败!")
         sys.wait(1000)
     end
+    if not audio.isEnd(0) then
+        log.info("手动关闭")
+        audio.playStop(0)
+    end
+    if audio.pm then
+        audio.pm(0,audio.STANDBY)
+    end
+    -- audio.pm(0,audio.SHUTDOWN)	--低功耗可以选择SHUTDOWN或者POWEROFF,如果codec无法断电用SHUTDOWN
+    log.info("mem", "sys", rtos.meminfo("sys"))
+    log.info("mem", "lua", rtos.meminfo("lua"))
+    sys.wait(1000)
     sysplus.taskDel(taskName)
 end
 
-local function audio_callback(id, event)
-    local succ,stop,file_cnt = audio.getError(0)
-    if not succ then
-        if stop then
-            log.info("用户停止播放")
-        else
-            log.info("第", file_cnt, "个文件解码失败")
-        end
-    end
-    sysplus.sendMsg(taskName, MSG_PD)
-end
 
 local function audio_task()
-    gpio.setup(24, 1, gpio.PULLUP)          -- i2c工作的电压域
-    gpio.setup(power_pin, 1, gpio.PULLUP)   -- 打开音频编解码供电
-    gpio.setup(pa_pin, 1, gpio.PULLUP)      -- 打开音频放大器
-    audio_setup()
-    audio.on(0, audio_callback)
-    audio_play(string)
+    audio_play()
 end
 
+
 function airtts.play(string)
     play_string = string
     sysplus.taskInitEx(audio_task, taskName)

+ 3 - 1
module/Air8000/project/整机开发板出厂工程/user/main.lua

@@ -9,6 +9,7 @@ sys = require("sys")
 local airlcd = require "airlcd"
 local airmusic = require "airmusic"
 local airtts  = require "airtts"
+local airaudio  = require "airaudio"
 local aircam = require "camera8000_simple"
 local airrus = require "russia"
 local airstatus = require "statusbar"
@@ -132,7 +133,7 @@ local function handal_main(x,y)
   elseif key == 6 then
   elseif key == 7 then
   elseif key == 8 then    --  tts
-    airtts.play("支持 4G + 卫星定位 + WiFi + 蓝牙,5秒极速联网,51个可编程IO/4个UART/4个通用ADC/1个CAN接口,支持LuatOS二次开发,源码开放例程丰富,支持485/232/充电/以太网驱动/多网融合/VoLTE通话")
+    airtts.play("支持 4G,卫星定位,WiFi,蓝牙,5秒极速联网,51个可编程IO/4个UART/4个通用ADC/1个CAN接口,支持LuatOS二次开发,源码开放例程丰富,支持485/232/充电/以太网驱动/多网融合/VoLTE通话")
   elseif key == 9 then
     cur_fun = "main1"
   end
@@ -340,6 +341,7 @@ wdtInit()
 
 
 local function UITask()
+    airaudio.init()
     airlcd.lcd_init("AirLCD_1001")
     sys.subscribe("TP",tp_handal)