设为首页收藏本站
查看: 913|回复: 0

【米尔瑞萨RZ/G2L开发板-创新应用】5、智能楼顶花园Sqlite安装和天气获取、存储

[复制链接]

7

主题

2

回帖

125

积分

注册会员

积分
125
忙碌的死龙 发表于 2023-9-12 17:04:24 | 显示全部楼层 |阅读模式
本帖最后由 忙碌的死龙 于 2023-9-12 18:48 编辑

一、编译SQLite3
1.1 注意事项
交叉编译 SQLite3 时需要注意以下事项:
  • 目标架构:确定您要交叉编译的目标架构,例如 ARM、MIPS、x86 等。确保您有适用于目标架构的交叉编译工具链。
  • 交叉编译工具链:安装和配置适用于目标架构的交叉编译工具链。这通常包括交叉编译器、交叉编译库和交叉编译链接器。您可能需要从硬件供应商或开发社区获取工具链。
  • 目标操作系统:了解您的目标操作系统,包括版本和配置。SQLite3 的编译选项可能会受到目标操作系统的影响。
  • 编译选项:根据目标架构和操作系统配置适当的编译选项。SQLite 提供了一些编译宏,您可以根据需要启用或禁用它们,以定制 SQLite 的行为。
  • 交叉编译命令:使用正确的交叉编译命令来编译 SQLite3。这通常涉及设置适当的环境变量和编译选项,以确保编译器和链接器能够正确识别目标架构和操作系统。
  • 库依赖项:确保您的交叉编译环境中存在任何必要的库依赖项,这些库可能在 SQLite3 编译过程中需要链接。

交叉编译是一个复杂的过程,需要谨慎处理。

1.2 下载源码
在Sqlite官网可以找到下载链接,这里我们使用最新版本的,下载地址为https://www.sqlite.org/2023/sqlite-autoconf-3430100.tar.gz
在Ubuntu上执行以下命令下载
  1. wget https://www.sqlite.org/2023/sqlite-autoconf-3430100.tar.gz -O sqlite.tar.gz
复制代码
1.3 配置工具链路径
解压缩官方提供的工具链sdk包并安装后,可以使用命令激活环境工具链,然后就可以直接使用aarch64-poky-linux-gcc来调用了。

  1. unset LD_LIBRARY_PATH && . /mnt/MyNAS/walker/IoT/Linux/myir/environment-setup-aarch64-poky-linux
复制代码
测试能检测到编译器
gcc.png


1.4 确认编译选项
大多数情况下,使用默认编译选项可以很好地构建 SQLite。由于我们是在X86平台上编译,需要指定编译工具链和编译的平台。
所以编译选项配置为ARCH=aarch64 --host=x86_64
1.5 开始编译
解压缩sqlite3源码包
  1. tar -zxf sqlite3.tar.gz
复制代码
创建build目录
  1. mkdir sqlite/build
复制代码
切换到build目录
  1. cd sqlite/build
复制代码
配置并编译sqlite,经测试不需要指定CC变量就可以正常编译
  1. ../configure ARCH=aarch64 --host=x86_64
复制代码
编译完成后,目录下就出现sqlite3可执行程序了。
1.6 上传到开发板进行测试
  1. scp sqlite3 walker@192.168.50.82:~/.bin/
复制代码
二、生成初始数据库表
  1. <blockquote>CREATE TABLE [weathers] (
复制代码
其实在Golang代码里,也可以自动生成对应的数据库表单。

三、使用Golang获取天气信息并存储到数据库

要使用 Golang 获取天气信息并将其存储到 SQLite 数据库中,您可以按照以下步骤操作:

3.1 安装依赖:
  在开始之前,确保已经安装了 Golang 和 GORM。您可以使用以下命令安装 GORM:
  1. go get -u github.com/go-gorm/gorm
  2. go get -u github.com/mattn/go-sqlite3
复制代码


3.2 创建数据库模型:
   创建一个包含天气信息的数据库模型。
module.png
3.3 连接到数据库:
   使用 GORM 连接到 SQLite 数据库并自动创建数据库表。
opende.png

3.4 获取天气信息:
  1. func getWether(city, key string) Weather {
  2.         // 创建http.Client对象
  3.         client := &http.Client{}

  4.         host_url := "https://restapi.amap.com/v3/weather/weatherInfo?city=" + city + "&key=" + key
  5.         // 创建HTTP请求
  6.         req, err := http.NewRequest("GET", host_url, nil)
  7.         if err != nil {
  8.                 panic(err)
  9.         }

  10.         // 发送HTTP请求
  11.         resp, err := client.Do(req)
  12.         if err != nil {
  13.                 panic(err)
  14.         }

  15.         // 处理HTTP响应
  16.         defer resp.Body.Close()
  17.         body, err := ioutil.ReadAll(resp.Body)
  18.         if err != nil {
  19.                 panic(err)
  20.         }

  21.         var data map[string]interface{}
  22.         if err := json.Unmarshal(body, &data); err != nil {
  23.                 panic("无法解析 JSON 数据:" + err.Error())
  24.         }
  25.         temp, ok := data["lives"].([]interface{})[0].(map[string]interface{})
  26.         if !ok {
  27.                 panic("获取天气数据:" + err.Error())
  28.         }
  29.         var rel Weather
  30.         rel.City = temp["city"].(string)
  31.         rel.Condition = temp["weather"].(string)
  32.         t, _ := strconv.ParseFloat(temp["temperature_float"].(string), 64)
  33.         rel.Temperature = float32(t)
  34.         h, _ := strconv.ParseFloat(temp["humidity_float"].(string), 64)
  35.         rel.Humidity = float32(h)
  36.         rel.Winddirection = temp["winddirection"].(string)
  37.         rel.Windstrength = temp["windpower"].(string)
  38.         rel.Reporttime = temp["reporttime"].(string)
  39.         return rel
  40. }
复制代码
这里使用高德的天气获取API,获取到天气的json数据后,转换成对应属性赋值给Weather实例,然后回传给调用者。

3.5 将天气信息存储到数据库:
   使用 GORM 将获取的天气信息存储到数据库中。例如:

savedb.png

3.6 查询和操作数据
   可以使用 GORM 查询和操作数据库中的数据。例如,可以检索特定城市的天气信息:

  1. db.Where("city = ?", "玉林市").First(&result)
复制代码
3.7 测试:
运行代码进行测试(go run main.go),可以看到sqlite数据库文件里增加了新的内容
ins_w.png
这些步骤提供了一个基本的框架,用于使用 Golang 和 GORM 获取天气信息并将其存储到 SQLite 数据库中。后面会根据实际需求进行进一步的定制和扩展。








回复

使用道具 举报

您需要登录后才可以回帖 登录

本版积分规则

Archiver|手机版|小黑屋|米尔科技论坛   

GMT+8, 2024-11-21 20:27 , Processed in 0.048106 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表