ESP8266 APRS 板子修改为提交数据到T2服务器的方法

一年多前,我折腾好了基于ESP8266 + BMP280 + 锂电池 方案做了个nodeMCU固件的APRS WX板子。

https://github.com/bg6cq/nodemcu_bme280https://github.com/bg6cq/nodemcu_bme280

自己动手编译nodemcu固件(ESP8266)_五块钱的方便面的博客-CSDN博客_nodemcu 固件编译起因或者说好处最近在玩ESP8266 + BMP280 的APRS气象数据报,其实很早之前就看到过BG6CQ老师的github上的软件仓库 https://github.com/bg6cq/nodemcu_bme280 ,也刚好买过一块esp8266神器,然后之前买电子元件的时候还买过BMP280温度气压计,于是刻了快小PCB搭了个AMS1117-3.3的供电玩过。但那个时候模块之间,电源之间都是杜邦线和跳线焊接飞来飞去。非常不适合长期固定使用。后来就给扔盒子里吃灰了。最近换了我大UOS系统,想着练https://blog.csdn.net/chenqioulin/article/details/111086070

但最近一两年,国内的WX站点就看不到了,我发现我的板子也没法工作了。看不到传上来的数据,然后发现bg6cq老师的站点也没法访问了。就把板子关掉了。

最近简单看了下APRS-IS的网关相关信息,发现之前的板子是用的udp提交数据到bg6cq大佬的服务器,然后服务器再转发数据到aprs的tier2服务器上.,既然国内都停了udp的服务器了,那我直接向Tier2服务器提交数据不就完了。随后研究了下直接向aprs-is服务器提交数据的报文

APRS Tier 2 Networkhttp://www.aprs2.net/

非常简单

telnet 156.251.162.146 14580
user BI8xxx-12 pass xxxx vers  esp-nodemcu-v1
BI8AKT-12>ES66:=3010.59N/10507.48E_000/000g000t084r000p000h00b09407 ESP8266 bmp280 indoor, WIFI RSSI: -90,Battery Volt:3.89V

  那其实就修改一下之前模块里的bmp280.lua数据提交部分就可以了。

function send_data()
  if send_aprs then
    print("aprs send "..aprs_host)
    str = aprs_prefix.."000/000g000t"..string.format("%03d", temp*9/5+32).."r000p000h"..string.format("%02d",humi).."b"..string.format("%05d", press)
 --  str = str.." ESP8266-BMP280 indoor".." WIFI-RSSI: "..rssi
    str = str.." ESP8266 bmp280 indoor,".." WIFI RSSI: "..rssi..",Battery Volt:"..read_adc().."V\n"
    strlogin = "user BI8xxx-12 pass xxxxx vers  esp-nodemcu-v1\n"
   print(str)
   print(strlogin)
   sk=net.createConnection(net.TCP, 0)
   sk:connect(aprs_port,aprs_host)
   sk:on("receive",  function(sv, c) 
    print(c)
    end )
   sk:send(strlogin)
   sk:send(str)
   sk:on("sent", function(sck) sck:close() end)
  --  conn = net.createConnection()
  -- conn:send(aprs_port,aprs_host,strlogin)
  --  conn:send(aprs_port,aprs_host,str)
  --  conn:close()
  data_send = true
  end

 主要是之前用的udp连接,简单,直接发包出去,现在需要改成tcp连接,需要发送呼号以及验证码去登陆后再发消息。

TCP连接以及发送登陆以及APRS报文的几条语句如下:

   sk=net.createConnection(net.TCP, 0)
   sk:connect(aprs_port,aprs_host)
   sk:on("receive",  function(sv, c) 
    print(c)
    end )
   sk:send(strlogin)  #登陆
   sk:send(str)       #APRS
   sk:on("sent", function(sck) sck:close() end)  #发送后执行回调函数关闭socket连接。

这么改造后,效果如下图,

 有时间再玩一下MQTT吧,这个固件里面也带了MQTT发送的。

2022-11-23 更新:

MTQQ发阿里云IOT已经测试过了,

ESP8266 阿里云 MQTT物联网测试_五块钱的方便面的博客-CSDN博客_mqtt_host前面写了篇恢复ESP8266 发布APRS的文章ESP8266 APRS 板子修改为提交数据到T2服务器的方法_五块钱的方便面的博客-CSDN博客一年多前,我折腾好了基于ESP8266 + BMP280 + 锂电池 方案做了个nodeMCU固件的APRS WX板子。https://github.com/bg6cq/nodemcu_bme280https://github.com/bg6cq/nodemcu_bme280自己动手编译nodemcu固件(ESP8266)_五块钱的方便面的博客-CSDN博客.https://blog.csdn.net/chenqioulin/article/details/124528668用微信小程序来拉数据也测试过了,还专门找了大佬的小程序来修改,基本功能都调通了的。没测试下发控制命令和数据。

这两个月发现APRS又没数据了,连上串口线看了下,tier2的IP地址变了,还是用域名解析IP后再提交数据吧。代码如下:

    -- resolv tier2 aprs server host ip
    sk = net.createConnection(net.TCP, 0)
    net.dns.setdnsserver("114.114.114.114", 0)
    net.dns.resolve("asia.aprs2.net", function(sk, ip_aprs) aprs_host_asia=ip_aprs end)
    print("resolved aprs_host_asia:"..aprs_host_asia.."\n") 
    sk = nil
    -- end resolve

    if aprs_host_asia then
    sk=net.createConnection(net.TCP, 0)
    sk:connect(aprs_port,aprs_host)
    sk:on("receive",  function(sv, c) 
      print(c)
      end )
    sk:send(strlogin)
    sk:send(str)
    sk:on("sent", function(sck) sck:close() end)

    data_send = true
    end

这下应该不会连不上了吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值