一年多前,我折腾好了基于ESP8266 + BMP280 + 锂电池 方案做了个nodeMCU固件的APRS WX板子。
https://github.com/bg6cq/nodemcu_bme280https://github.com/bg6cq/nodemcu_bme280
但最近一两年,国内的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
这下应该不会连不上了吧。