【米尔瑞萨RZ/G2L开发板-创新应用】5、智能楼顶花园Sqlite安装和天气获取、存储
本帖最后由 忙碌的死龙 于 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上执行以下命令下载
wget https://www.sqlite.org/2023/sqlite-autoconf-3430100.tar.gz -O sqlite.tar.gz1.3 配置工具链路径
解压缩官方提供的工具链sdk包并安装后,可以使用命令激活环境工具链,然后就可以直接使用aarch64-poky-linux-gcc来调用了。
unset LD_LIBRARY_PATH && . /mnt/MyNAS/walker/IoT/Linux/myir/environment-setup-aarch64-poky-linux测试能检测到编译器
1.4 确认编译选项
大多数情况下,使用默认编译选项可以很好地构建 SQLite。由于我们是在X86平台上编译,需要指定编译工具链和编译的平台。
所以编译选项配置为ARCH=aarch64 --host=x86_64
1.5 开始编译
解压缩sqlite3源码包
tar -zxf sqlite3.tar.gz创建build目录
mkdir sqlite/build切换到build目录
cd sqlite/build配置并编译sqlite,经测试不需要指定CC变量就可以正常编译
../configure ARCH=aarch64 --host=x86_64编译完成后,目录下就出现sqlite3可执行程序了。
1.6 上传到开发板进行测试
scp sqlite3 walker@192.168.50.82:~/.bin/二、生成初始数据库表
<blockquote>CREATE TABLE (其实在Golang代码里,也可以自动生成对应的数据库表单。
三、使用Golang获取天气信息并存储到数据库
要使用 Golang 获取天气信息并将其存储到 SQLite 数据库中,您可以按照以下步骤操作:
3.1 安装依赖:
在开始之前,确保已经安装了 Golang 和 GORM。您可以使用以下命令安装 GORM:
go get -u github.com/go-gorm/gorm
go get -u github.com/mattn/go-sqlite3
3.2 创建数据库模型:
创建一个包含天气信息的数据库模型。
3.3 连接到数据库:
使用 GORM 连接到 SQLite 数据库并自动创建数据库表。
3.4 获取天气信息:
func getWether(city, key string) Weather {
// 创建http.Client对象
client := &http.Client{}
host_url := "https://restapi.amap.com/v3/weather/weatherInfo?city=" + city + "&key=" + key
// 创建HTTP请求
req, err := http.NewRequest("GET", host_url, nil)
if err != nil {
panic(err)
}
// 发送HTTP请求
resp, err := client.Do(req)
if err != nil {
panic(err)
}
// 处理HTTP响应
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
var data mapinterface{}
if err := json.Unmarshal(body, &data); err != nil {
panic("无法解析 JSON 数据:" + err.Error())
}
temp, ok := data["lives"].([]interface{}).(mapinterface{})
if !ok {
panic("获取天气数据:" + err.Error())
}
var rel Weather
rel.City = temp["city"].(string)
rel.Condition = temp["weather"].(string)
t, _ := strconv.ParseFloat(temp["temperature_float"].(string), 64)
rel.Temperature = float32(t)
h, _ := strconv.ParseFloat(temp["humidity_float"].(string), 64)
rel.Humidity = float32(h)
rel.Winddirection = temp["winddirection"].(string)
rel.Windstrength = temp["windpower"].(string)
rel.Reporttime = temp["reporttime"].(string)
return rel
}这里使用高德的天气获取API,获取到天气的json数据后,转换成对应属性赋值给Weather实例,然后回传给调用者。
3.5 将天气信息存储到数据库:
使用 GORM 将获取的天气信息存储到数据库中。例如:
3.6 查询和操作数据:
可以使用 GORM 查询和操作数据库中的数据。例如,可以检索特定城市的天气信息:
db.Where("city = ?", "玉林市").First(&result)3.7 测试:
运行代码进行测试(go run main.go),可以看到sqlite数据库文件里增加了新的内容
这些步骤提供了一个基本的框架,用于使用 Golang 和 GORM 获取天气信息并将其存储到 SQLite 数据库中。后面会根据实际需求进行进一步的定制和扩展。
页:
[1]