将旧数字时钟(带室外温度计)置于类固醇上

2021-05-05 20:52:01

根据背面的标签,它是一个重创的“Electronics Notherltd”。型号。 7904。

但最近,我对室外温度传感器并不令人兴奋。它会在2个AAA电池上运行,并有额外的问题是公寓的一侧。所以你全天都会得到倾斜的读数,因为太阳在天空中移动。

第一步是弄清楚户外温度Sensorspeak ob的协议。并祈祷这是一个简单的东西。鉴于时钟是威尔斯普斯普利蒂现在,假设它不会在火箭科学表情中是安全的。

使用高度科学的方法“让我们通过所有ISM箱子,我将电池拉出室外传感器,”我克定了433.9 MHz:

稍后一点搜索,我在RTL_433上落地,这是一个很棒的ProtocoldeCoder,了解在ISM频段上经常发出的许多方言。

#define packet_size 32 bool pattern_template [packet_size] = {0,0,0,1,// [0..3]静态模式0,0,1,0,// [4..7]通道(0 = 2 ,2 = 1,4 = 3)1,0,1,1,1,1,1,1,1,1,1,1,1,// [8..17]温度_c =图案 - 500/10 0,0,0, 0,0,0,0,// [18..24]静态图案0,// [25]电池(0 = OK);警告:我们的接收器采用棒低(1)粘滞0,// [26]静态模式0,// [27]未知0,0,0,0 // [28..31] CRC-4 [0 。.27],poly 0x9,init 0x1};

我周围有一个廉价的434 MHz,所以我将它连接到ESP32板上:

基本上,我只是在敲击方案。因为它结果,它是简单的OOK(开关键控)方案。

// ...静态void传输(bool状态){uint16_t l =状态? one_bit_length:zero_bit_length; gpio_set_level(txpin,1); vtaskdelay(l / porttick_period_ms); gpio_set_level(txpin,0); vtaskdelay((bit_length - l)/ porttick_period_ms);静态void transmit_Array(Bool * AR,UINT8_T大小){for(uint8_t i = 0; i< size; i ++){发送(AR [i]); }} // ... void tx434_task(void * pvparameters){bool packet [packet_size]; esp_logi(标记,"配置"); gpio_pad_select_gpio(LEDPIN); gpio_set_direction(LEDPIN,GPIO_MODE_OUTPUT); gpio_pad_select_gpio(txpin); gpio_set_direction(txpin,gpio_mode_output); Esp_Logi(标签,"进入循环");虽然(1){float temp_to_send = temp_errval; Time_t现在; if(temp_set){时间(&现在); if(last_ts + temp_timeout> =现在){temp_to_send = current_temp; }} init_with_temp(packet,temp_to_send,false,1); esp_logi(标签,"发送:%.01f",temp_to_send);带领 ();传输array(preamble_bits,4);传输array(preamble_bits,4);传输array(数据包,packet_size);差距 ();传输array(preamble_bits,4);传输array(数据包,packet_size);差距 ();传输array(preamble_bits,4);传输array(数据包,packet_size); LED_OFF(); esp_logi(标签,"去睡觉"); vtaskdelay(179 * 1000 / porttick_period_ms); }}

我转向终结结构的概念证明。

我是HTTP的忠实粉丝。它很容易调试,无处不在,易于达到目标。

我可以通过esp32做一切。但是在中间的一个更强大的网络服务器的额外上行的额外上行的是我现在可以在手机3上检查测温体3,并且不必在idecide以与web服务器的修补程序一起重新闪烁esp32。

我很快就可以了解可用的东西,并表明,特别是对蓝牙le和ruuvitag的比较有效。

所以我不会浪费一分钟,以更具程序员 - 友好语言写作推动者。

// ruuvipush.go package main import("上下文"" fmt"" net / http"" net / url""操作系统#34;" strconv"" github.com/go-ble/ble"" github.com/-ble/ble/examples/lib/dev& #34;& #34; github.com/peterhellberg/ruuvitag")var apiurl ="胡说八道。 Func设置(CTX上下文。上下文)上下文。上下文{D,err:= dev。 defaultDevice()如果err!= nil {panic(err)} ble。 setdefaultdevice(d)返回ble。 withsighandler(上下文。使用cancel(ctx))} func main(){如果len(args [1:])> = 1 {apiurl = os。 args [1]}别的{fmt。 Printf("使用:$ 0< apiurl> \ n")操作系统。退出(1)} ctx:= setup(上下文。背景())ble。扫描(CTX,True,Handler,Filter)} Func Handler(BLE。广告){RAW,ERR:= RUUvitag。 parserawv1(a。制造商adata())如果err == nil {// fmt.printf(" [%s] rssi:%3d:%+ v \ n" a.addr(),a。 RSSI(),RAW)RESP,ERR:= HTTP。 Postform(APIURL,URL。值{" ID":{a。Addr()。String()},"温度":{strconv。formatfloat(RAW。温度,&#39 ; F',6,64)}})如果err!= nil {fmt。 printf("未能发布:%v \ n",err)} else {resp。身体 。关闭()}}} Func筛选器(BLE。广告)BOOL {RETURN RUUVITAG。 ISRAWv1(a。制造商DATA())}

而且网络服务器本身是如此令人毛骨悚然的简单,我将指出你的气温。伯特比在这里粘贴它。

我仍然尚未考虑是否在所有Ruuvi标签上显示平均值,或最小。时间会告诉什么更好。

无论如何,作为高山Linux上的DaemontoolsServices扔掉它也很容易。如果您想要详细信息,它都在Ruvi-TempserverRepo中。

好吧,你有它。将数字时钟放在类固醇上不必撇台。

事实上,唯一的硬介质罕见部分是编写发射机。它只是简单的复制&粘贴“编程”。

Ruvitag是一个小的温度/湿度/压力镜,可通过BLE传输数据。使用CR2477电池,其电池寿命在〜多年中测量。 ↩

RTL-SDR是一个廉价的DVB-T加密狗Sporting Realtek RTL2832U芯片,SomesMart人员变成了一个SDR接收者。如果你不能超过10美元,你就没有努力。 ↩