AIR780E使用485芯片进行通信调试记录

最近项目需要,需要用485去采集传感器信号,然后给信号传至服务器。板子上网采用4G。由于没有能力去设计板子(就算设计出来,加工费也挺贵),因此考虑去某多多上找一个带4G功能,带485的板子,自己写一下程序。输入关键字4G ,485,下面这个板子就出来了。

这个板子看起来挺好,还是宽电压输入5到24V输入,刚好传感器是12V。怎么看这板子怎么合适。果断下单,40块还挺贵。

板子拿到以后,联系商家要资料,商家给了合宙官网 简介 - @air780e - 合宙模组资料中心,以及一个板子电路图,如下

按资料的说法,板子上的STM32芯片,只是一个透传功能,实际按商家给的给的AT指令测试,发现确实可以通过485给AIR780E发生发送AT指令,也可以收到AIR780E返回的结果。见下图。

有了这个前提,似乎是修改一下AIR780E里面的代码,就行了。好像是很简单的一件事。AIR780E.cn上给的资料很全,demo也很全。先从串口收发开始,就是停向485发送数据,接受数据,然后输出。代码:

local uartid = 1 -- 根据实际设备选取不同的uartid

--初始化
uart.setup(
    uartid,--串口id
    115200,--波特率
    8,--数据位
    1--停止位
)

-- 收取数据会触发回调, 这里的"receive" 是固定值
uart.on(uartid, "receive", function(id, len)
    local s = ""
    repeat
        s = uart.read(id, 128)
        if #s > 0 then -- #s 是取字符串的长度
            -- 关于收发hex值,请查阅 https://doc.openluat.com/article/583
            log.info("uart", "receive", id, #s, s)
            -- log.info("uart", "receive", id, #s, s:toHex()) --如果传输二进制/十六进制数据, 部分字符不可见, 不代表没收到
        end
    until s == ""
end)

sys.taskInit(function()
    -- 循环两秒向串口发一次数据
    while true do
        sys.wait(2000)
        uart.write(uartid, "111111")
    end
end)

-- 用户代码已结束---------------------------------------------
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

代码比较简单,直接下载到板子,运行。发现数据收不到了。百思不得其解,到底哪里出了问题?

联系商家以后,商家给的答案是,他也不知道。推测,STM32芯片里面,串口透传,只透传AT指令,其他直接给过滤了。所以还得给STM32重新写一个程序,用来透传AIR780E和485。

这就头大了,那就写呗,按道理就是两个串口互传,也不是很难。代码写好,使用下载器下载到STM32,上电,运行,发现依然不管用,一度怀疑我STM32的代码写的有问题,就不停的修改修改再修改,最后还是不行。一脸懵逼的我,一直一脸懵逼。问商家要STM32的示例代码,商家也没有。后来查看了一下板子上485芯片型号,SP3485EEN,搜索资料发现,这个芯片是一个半双工芯片,需要用一个针脚来控制芯片方向。见下图:

 顿时明白了,为啥一直收不到数据,这是需要用阵脚控制方向才行。又仔细看了一下板子的电路图,发现STM32上面PA1是控制方向用的。使用这个阵脚,输出高电压,就可以对485发送数据。找到问题所在,解决起来就简单了。于是改代码,下载。

突然STM下载器找不到芯片了,在最后关头,STM芯片坏了。。。。。。可能原因是,下载器3.3v供电,和4855V供电同时加上,导致STM32芯片坏了。最尴尬的事情摸过如此。

不过没关系,这个STM32芯片只是一个透传芯片,也就是说这个STM32,就是放屁脱裤子,多余的。

经过仔细看电路图(见下图),AIR780E的串口是可以直接可以SP3485芯片链接的。R13,R15,R17,是接到STM32的三个0欧电阻(实际就是一个方便断开的条线),接到AIR780E上的R12,R14,R16是断开的。只需要将下三个0欧电阻拆掉,放到上面,就行了。这样就跳过STM32了,这样做唯一的缺点就是,花钱买的STM芯片,结果就是一个摆设。

电路图对应的实际板子布局如下,右侧是接到STM32的三个0欧电阻。左侧是断开的,到AIR780E。将0欧电阻转移一下位置就行了。

 修改后的板子如下图,下面两个0欧电阻,不小心掉了一个,但是不影响,因为这两个也是接到STM32的,芯片已经坏掉了,拆不拆都不影响。如果STM32不坏的话,应该是要拆掉比较好。

板子改造完毕以后,接下来就简单多了,没有中间商赚差价,直接通信就了。当然还是要用阵脚控制485芯片的方向的。如下图,AIR780E芯片上控制方向的阵脚是MAIN_DTR,图上标的是19。

local uartMode=gpio.setup(19, 1) ---阵脚19是控制串口方向的

每次发送数据之前,都需要将MAIN_DTR拉高,发送完毕再复位

--统一的串口发送数据-----------------------------------
function  send(data)
    log.info("uart send data",data)
	uartMode(1)	--发送之前拉高
    sys.wait(5)   --等待 
	uart.write(uartid,data)
    sys.wait(5)   --等待 
	uartMode(0)	--发送后复位
    log.info("uart send data over")
end

下载代码,运行。满心期待通信没有问题了。结果,板子能收到电脑发的数据,电脑收不到板子发来的数据。这可能的原因1:转移0欧电阻的时候,没有焊接牢固。2:方向阵脚无效。

既然是0欧电阻,实际上是可有可无的,于是就给几个0欧电阻全部去掉了,直接用锡短接。排除电路问题以后,发现依然没有解决问题。那就只可能是main_dtr这个阵脚的问题了。

百度搜索AIR780E的GPIO阵脚,发现MAIN_DTR引出的阵脚序号是19,实际上是GPIO22。

这个阵脚序号和GPIO序号不对应是普遍现象。

最终修改阵脚为22,解决问题。

local uartMode=gpio.setup(22, 1) ---阵脚22是控制串口方向的

PC与AIR780E通过串口通信成功。见下图: 

由于项目还在进行中,完整代码稍后一段时间分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值