Przeglądaj źródła

add:airtalk demo

alienwalker 8 miesięcy temu
rodzic
commit
58ea4febbe

+ 40 - 0
luat/demo/airtalk/airtalk_demo.lua

@@ -0,0 +1,40 @@
+local mqtt_host = "lbsmqtt.airm2m.com"
+local mqtt_port = 1884
+local mqtt_isssl = false
+local client_id = nil
+local user_name = "user"
+local password = "password"
+local mqttc = nil
+require "audio_config"
+
+local function airtalk_event_cb(event, param)
+    log.info("airtalk event", event, param)
+end
+
+local function mqtt_cb(mqtt_client, event, data, payload)
+    log.info("mqtt", "event", event, mqtt_client, data, payload)
+end
+
+function airtalk_demo_mqtt_8k()
+    --client_id也可以自己设置
+    client_id = mobile.imei()
+    audio_init()
+
+    mqttc = mqtt.create(nil, mqtt_host, mqtt_port, mqtt_isssl, {rxSize = 4096})
+    airtalk.config(airtalk.PROTOCOL_DEMO_MQTT_8K, mqttc, 200) -- 缓冲至少200ms播放
+    airtalk.on(airtalk_event_cb)
+    airtalk.start(client_id)
+
+    mqttc:auth(client_id,user_name,password) -- client_id必填,其余选填
+    mqttc:keepalive(240) -- 默认值240s
+    mqttc:autoreconn(true, 3000) -- 自动重连机制
+    mqttc:debug(false)
+    mqttc:on(mqtt_cb)
+
+    -- mqttc自动处理重连, 除非自行关闭
+    mqttc:connect()
+    while true do
+        --全是底层自动运行,到这里没什么可以演示的了
+        sys.wait(60000000)
+    end
+end

+ 32 - 0
luat/demo/airtalk/audio_config.lua

@@ -0,0 +1,32 @@
+function audio_init()
+    pm.ioVol(pm.IOVOL_ALL_GPIO, 3300)
+    local multimedia_id = 0
+
+    local i2s_id = 0
+    local i2s_mode = 0
+    local i2s_sample_rate = 16000
+    local i2s_bits_per_sample = 16
+    local i2s_channel_format = i2s.MONO_R
+    local i2s_communication_format = i2s.MODE_LSB
+    local i2s_channel_bits = 16
+    --air8000 core开发版+音频小板配置
+    local voice_vol = 60 --音频小板喇叭太容易失真了,不能太大
+    local i2c_id = 0
+    local pa_pin = 26
+    local pa_on_level = 1
+    local pa_delay = 200
+    local dac_power_pin = 28
+    local dac_power_on_level = 1
+    local dac_power_off_delay = 600
+    gpio.setup(24, 1)   --air8000的I2C0需要拉高gpio24才能用
+    gpio.setup(26, 0)
+    i2c.setup(0, 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, 0, pa_delay, dac_power_pin, dac_power_on_level, dac_power_off_delay)
+    audio.setBus(multimedia_id, audio.BUS_I2S,{chip = "es8311",i2cid = i2c_id , i2sid = i2s_id})	--通道0的硬件输出通道设置为I2S
+
+    audio.vol(multimedia_id, voice_vol)
+    audio.micVol(multimedia_id, 75)
+end

+ 31 - 0
luat/demo/airtalk/main.lua

@@ -0,0 +1,31 @@
+PROJECT = "airtalk_demo"
+VERSION = "1.0.0"
+require "airtalk_demo"
+local uplink = false
+local function key_cb()
+    if uplink then
+        uplink = false
+    else
+        uplink = true
+    end
+    log.info("uplink", uplink)
+    airtalk.uplink(uplink)
+end
+
+--按下boot开始上传,再按下停止,加入了软件去抖,不需要长按了
+gpio.setup(0, key_cb, gpio.PULLDOWN, gpio.RISING)
+gpio.debounce(0, 200, 1)
+--开始演示airtalk
+sys.taskInit(airtalk_demo_mqtt_8k)
+--定期检查ram使用情况,及时发现内存泄露
+sys.taskInit(function()
+    while true do
+        sys.wait(5000)
+        log.info("time", os.time())
+        log.info("lua", rtos.meminfo("lua"))
+        log.info("sys", rtos.meminfo("sys"))
+        log.info("psram", rtos.meminfo("psram"))
+    end
+end)
+
+sys.run()