diff --git a/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.hi.png b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.hi.png new file mode 100644 index 00000000..1ba4f5c7 Binary files /dev/null and b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.hi.png differ diff --git a/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.it.png b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.it.png new file mode 100644 index 00000000..1ba4f5c7 Binary files /dev/null and b/translated_images/IMG_5305.aa291c8812a9f1e5b08f3e789f9858e9eacc88c4bbc23296df1bffbbd9c671b3.it.png differ diff --git a/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.hi.png b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.hi.png new file mode 100644 index 00000000..3cac91bb Binary files /dev/null and b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.hi.png differ diff --git a/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.it.png b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.it.png new file mode 100644 index 00000000..3cac91bb Binary files /dev/null and b/translated_images/IMG_5306.d575b9ab7025877b0ceba872490fa561edf3c4fcd5e8cca4ae2607a309d48c50.it.png differ diff --git a/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.hi.png b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.hi.png new file mode 100644 index 00000000..967e6539 Binary files /dev/null and b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.hi.png differ diff --git a/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.it.png b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.it.png new file mode 100644 index 00000000..967e6539 Binary files /dev/null and b/translated_images/IMG_5307.f9c9b8361a8aa7345cc6e8ae05cf6b7583d43d3c37ecfbd76d3fdc531e3ac59c.it.png differ diff --git a/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.hi.png b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.hi.png new file mode 100644 index 00000000..247c1dd6 Binary files /dev/null and b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.hi.png differ diff --git a/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.it.png b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.it.png new file mode 100644 index 00000000..247c1dd6 Binary files /dev/null and b/translated_images/IMG_5308.cbd6ed7007e6906012162c19b9e4097936c57873cdb2e54159899066c4281dc5.it.png differ diff --git a/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.hi.png b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.hi.png new file mode 100644 index 00000000..e89d81c4 Binary files /dev/null and b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.hi.png differ diff --git a/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.it.png b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.it.png new file mode 100644 index 00000000..e89d81c4 Binary files /dev/null and b/translated_images/IMG_5309.23fbc3b6667bfb64fa44804f835f38885ad37d02b0a1c1c6e8d89f9a78ba19b4.it.png differ diff --git a/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.hi.png b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.hi.png new file mode 100644 index 00000000..0237836d Binary files /dev/null and b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.hi.png differ diff --git a/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.it.png b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.it.png new file mode 100644 index 00000000..0237836d Binary files /dev/null and b/translated_images/IMG_5310.0ee0eb2fbc1c2d0e2d331e74d32b371a4086c07b0839817e9d6b7d4b5c98fc60.it.png differ diff --git a/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.hi.png b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.hi.png new file mode 100644 index 00000000..4229fee0 Binary files /dev/null and b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.hi.png differ diff --git a/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.it.png b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.it.png new file mode 100644 index 00000000..4229fee0 Binary files /dev/null and b/translated_images/IMG_5311.8c90da6446c2d8c2ad70dd9e64f29b2b6f2b4d117f8502c3181be66297cc84da.it.png differ diff --git a/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.hi.png b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.hi.png new file mode 100644 index 00000000..9b503ac8 Binary files /dev/null and b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.hi.png differ diff --git a/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.it.png b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.it.png new file mode 100644 index 00000000..9b503ac8 Binary files /dev/null and b/translated_images/IMG_5312.a45550ddd8ce8e654919361d52b919e2f8b1dbd01439268b5d3b813133a4e19b.it.png differ diff --git a/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.hi.png b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.hi.png new file mode 100644 index 00000000..c98b7aaf Binary files /dev/null and b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.hi.png differ diff --git a/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.it.png b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.it.png new file mode 100644 index 00000000..c98b7aaf Binary files /dev/null and b/translated_images/IMG_5313.ed1b45211271dbd23dc596ce9f72078aba665bd5f21088a616a85dd966100427.it.png differ diff --git a/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.hi.png b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.hi.png new file mode 100644 index 00000000..706f83bc Binary files /dev/null and b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.hi.png differ diff --git a/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.it.png b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.it.png new file mode 100644 index 00000000..706f83bc Binary files /dev/null and b/translated_images/IMG_5314.c2203206a05a74b5a4f10a68bbe274e65849a63e1fefe008b2c94be4ae86839c.it.png differ diff --git a/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.hi.png b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.hi.png new file mode 100644 index 00000000..76bec4da Binary files /dev/null and b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.hi.png differ diff --git a/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.it.png b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.it.png new file mode 100644 index 00000000..76bec4da Binary files /dev/null and b/translated_images/IMG_5315.f698228e0e031bd430efcfab0d08b00d9f3af5289133ce88a9f56c0c3478cd71.it.png differ diff --git a/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.hi.png b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.hi.png new file mode 100644 index 00000000..b49060a2 Binary files /dev/null and b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.hi.png differ diff --git a/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.it.png b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.it.png new file mode 100644 index 00000000..b49060a2 Binary files /dev/null and b/translated_images/IMG_5316.29dc70d802ce83497258426614e3e1426a91d6f9777e853daa4a9351b841b94f.it.png differ diff --git a/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.hi.png b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.hi.png new file mode 100644 index 00000000..3ca064d5 Binary files /dev/null and b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.hi.png differ diff --git a/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.it.png b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.it.png new file mode 100644 index 00000000..3ca064d5 Binary files /dev/null and b/translated_images/IMG_5317.ed81e4c1ca5046dc50613049e39c905157fbb318ea19db44c738db513ac501b1.it.png differ diff --git a/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.hi.png b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.hi.png new file mode 100644 index 00000000..1f5f2412 Binary files /dev/null and b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.hi.png differ diff --git a/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.it.png b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.it.png new file mode 100644 index 00000000..1f5f2412 Binary files /dev/null and b/translated_images/IMG_5318.15dfffeb7f47abf7ca0393628024c1fd45761193ab23185c315e899bd0e7048b.it.png differ diff --git a/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.hi.png b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.hi.png new file mode 100644 index 00000000..2953cea1 Binary files /dev/null and b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.hi.png differ diff --git a/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.it.png b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.it.png new file mode 100644 index 00000000..2953cea1 Binary files /dev/null and b/translated_images/IMG_5319.b549b1fff0dcf143c2483044d0519a3c6dc3de12c88860911b378688e7a4e01b.it.png differ diff --git a/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.hi.png b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.hi.png new file mode 100644 index 00000000..2ce7dedf Binary files /dev/null and b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.hi.png differ diff --git a/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.it.png b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.it.png new file mode 100644 index 00000000..2ce7dedf Binary files /dev/null and b/translated_images/IMG_5320.8268d3f61972f348df46401d107399af17512db9ef769f6a44c6cbb18faba998.it.png differ diff --git a/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.hi.png b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.hi.png new file mode 100644 index 00000000..157c08c6 Binary files /dev/null and b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.hi.png differ diff --git a/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.it.png b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.it.png new file mode 100644 index 00000000..157c08c6 Binary files /dev/null and b/translated_images/IMG_5321.b207cf143a59458d150cb1fbd44c3678d14f9cfffe77a0ec64e1cdfe1436df1c.it.png differ diff --git a/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.hi.png b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.hi.png new file mode 100644 index 00000000..031361a6 Binary files /dev/null and b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.hi.png differ diff --git a/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.it.png b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.it.png new file mode 100644 index 00000000..031361a6 Binary files /dev/null and b/translated_images/IMG_5322.974809b9461a9e200e99ae46142b4885e093e5b9b668e0fd818de461e27856a7.it.png differ diff --git a/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.hi.png b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.hi.png new file mode 100644 index 00000000..3a43eb23 Binary files /dev/null and b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.hi.png differ diff --git a/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.it.png b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.it.png new file mode 100644 index 00000000..3a43eb23 Binary files /dev/null and b/translated_images/IMG_5323.4939fa17958f291bb856032bbd044a709c0199b2e3846f1801a7836d4455dd26.it.png differ diff --git a/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.hi.png b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.hi.png new file mode 100644 index 00000000..7c9552e3 Binary files /dev/null and b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.hi.png differ diff --git a/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.it.png b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.it.png new file mode 100644 index 00000000..7c9552e3 Binary files /dev/null and b/translated_images/IMG_5324.0afbc6f0caceb1a341a9606fc9b879938eebebbc8401fce37dff2b167ed4b410.it.png differ diff --git a/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.hi.png b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.hi.png new file mode 100644 index 00000000..78f695b7 Binary files /dev/null and b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.hi.png differ diff --git a/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.it.png b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.it.png new file mode 100644 index 00000000..78f695b7 Binary files /dev/null and b/translated_images/IMG_5325.9e9d9e9b85a10b06ac6038bf88ef91ef56fd371ed9e67b53495cd6878019faf9.it.png differ diff --git a/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.hi.png b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.hi.png new file mode 100644 index 00000000..77f563fb Binary files /dev/null and b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.hi.png differ diff --git a/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.it.png b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.it.png new file mode 100644 index 00000000..77f563fb Binary files /dev/null and b/translated_images/IMG_5326.35bbc9e054c704d0418a8ba7418aa38f51baee13bd2b00cfe8300e1500fa9f32.it.png differ diff --git a/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.hi.png b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.hi.png new file mode 100644 index 00000000..8dccd514 Binary files /dev/null and b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.hi.png differ diff --git a/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.it.png b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.it.png new file mode 100644 index 00000000..8dccd514 Binary files /dev/null and b/translated_images/IMG_5327.804b63a605b5a77a7b60c2fbf370be0f7364f2b5acb98c736420728e61845b62.it.png differ diff --git a/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.hi.png b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.hi.png new file mode 100644 index 00000000..b75e015e Binary files /dev/null and b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.hi.png differ diff --git a/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.it.png b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.it.png new file mode 100644 index 00000000..b75e015e Binary files /dev/null and b/translated_images/IMG_5328.925a9da23d96759f6c7c13bfcd94b8063bb5082d2e8a0431058c057e6d14446b.it.png differ diff --git a/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.hi.png b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.hi.png new file mode 100644 index 00000000..5bfed282 Binary files /dev/null and b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.hi.png differ diff --git a/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.it.png b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.it.png new file mode 100644 index 00000000..5bfed282 Binary files /dev/null and b/translated_images/IMG_5329.27da5fcbc3336773e94bbd2640df07799c76051bf97d2db7891d47bc462c6e09.it.png differ diff --git a/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.hi.png b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.hi.png new file mode 100644 index 00000000..34ca765c Binary files /dev/null and b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.hi.png differ diff --git a/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.it.png b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.it.png new file mode 100644 index 00000000..34ca765c Binary files /dev/null and b/translated_images/IMG_5330.3db3d5ea01c8cca2ae41cf5ea501a0a836569a3abbc2ae95696e0ad1dd005b6a.it.png differ diff --git a/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.hi.png b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.hi.png new file mode 100644 index 00000000..d1f7bc09 Binary files /dev/null and b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.hi.png differ diff --git a/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.it.png b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.it.png new file mode 100644 index 00000000..d1f7bc09 Binary files /dev/null and b/translated_images/IMG_5331.181987d3d094472fbf569a61760fadf282575f2821138de50007e408fd63182e.it.png differ diff --git a/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.hi.png b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.hi.png new file mode 100644 index 00000000..c215b446 Binary files /dev/null and b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.hi.png differ diff --git a/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.it.png b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.it.png new file mode 100644 index 00000000..c215b446 Binary files /dev/null and b/translated_images/IMG_5332.4beed56eaa5158e3785dbacb53c9670a0ef1699ce386528f4bb9bad50adf88ca.it.png differ diff --git a/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.hi.png b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.hi.png new file mode 100644 index 00000000..63f58daa Binary files /dev/null and b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.hi.png differ diff --git a/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.it.png b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.it.png new file mode 100644 index 00000000..63f58daa Binary files /dev/null and b/translated_images/IMG_5333.53c3364c2ee0e7bb5db0e299915faaf31e47bb99ad045ec8f6de6ca23d323f47.it.png differ diff --git a/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.hi.png b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.hi.png new file mode 100644 index 00000000..3eb38501 Binary files /dev/null and b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.hi.png differ diff --git a/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.it.png b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.it.png new file mode 100644 index 00000000..3eb38501 Binary files /dev/null and b/translated_images/IMG_5334.979472e433948c109b122ae4bbd0f96971dc2e7b1e64615776ebb7337a97e183.it.png differ diff --git a/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.hi.png b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.hi.png new file mode 100644 index 00000000..4f960870 Binary files /dev/null and b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.hi.png differ diff --git a/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.it.png b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.it.png new file mode 100644 index 00000000..4f960870 Binary files /dev/null and b/translated_images/IMG_5335.9f5bfba69a8d5a901c3e3b994a69f62a00d73ef9209b85561553d2ae99a56615.it.png differ diff --git a/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.hi.png b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.hi.png new file mode 100644 index 00000000..ca5b5882 Binary files /dev/null and b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.hi.png differ diff --git a/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.it.png b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.it.png new file mode 100644 index 00000000..ca5b5882 Binary files /dev/null and b/translated_images/IMG_5336.1b46586fdec957670ea71c1bd68c26f73aa95cd5671d057328fd198640729db7.it.png differ diff --git a/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.hi.png b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.hi.png new file mode 100644 index 00000000..2c3440cd Binary files /dev/null and b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.hi.png differ diff --git a/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.it.png b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.it.png new file mode 100644 index 00000000..2c3440cd Binary files /dev/null and b/translated_images/IMG_5337.91c82be4d37029b03cbb07553d92b9d2dd672e22a07fee6453cbc40568fbdef3.it.png differ diff --git a/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.hi.png b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.hi.png new file mode 100644 index 00000000..5294a9dc Binary files /dev/null and b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.hi.png differ diff --git a/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.it.png b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.it.png new file mode 100644 index 00000000..5294a9dc Binary files /dev/null and b/translated_images/IMG_5338.9ab356541448923b528f2dedecd72d7ecd07d53cc69118aeb861c39dccb8b8cc.it.png differ diff --git a/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.hi.png b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.hi.png new file mode 100644 index 00000000..912ac4ca Binary files /dev/null and b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.hi.png differ diff --git a/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.it.png b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.it.png new file mode 100644 index 00000000..912ac4ca Binary files /dev/null and b/translated_images/IMG_5340.8440651b3ce1dd35d9962036330b32a600fb3f59078a581a05c93920c5012b3a.it.png differ diff --git a/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.hi.png b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.hi.png new file mode 100644 index 00000000..8e47de7d Binary files /dev/null and b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.hi.png differ diff --git a/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.it.png b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.it.png new file mode 100644 index 00000000..8e47de7d Binary files /dev/null and b/translated_images/IMG_5341.a1aa041c42dbc534c033447b06f0546fdd779b3ed5034992ded08a45a960fff5.it.png differ diff --git a/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.hi.png b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.hi.png new file mode 100644 index 00000000..b3c98d83 Binary files /dev/null and b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.hi.png differ diff --git a/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.it.png b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.it.png new file mode 100644 index 00000000..b3c98d83 Binary files /dev/null and b/translated_images/IMG_5342.9f3b93d9fab90d3b3c1936edb55768b57024c9ebe88a214be315f5ebb083e45d.it.png differ diff --git a/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.hi.png b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.hi.png new file mode 100644 index 00000000..1d494613 Binary files /dev/null and b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.hi.png differ diff --git a/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.it.png b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.it.png new file mode 100644 index 00000000..1d494613 Binary files /dev/null and b/translated_images/IMG_5343.fa30105d3c10cad2079ca2b2f023e9dab8f82824a235be61837d7e9d09d8d067.it.png differ diff --git a/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.hi.png b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.hi.png new file mode 100644 index 00000000..47ced39a Binary files /dev/null and b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.hi.png differ diff --git a/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.it.png b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.it.png new file mode 100644 index 00000000..47ced39a Binary files /dev/null and b/translated_images/IMG_5344.acfcd61ee5281321426b2d93efeeb01a60505e73b4c5ee6224c7fa375027b9d8.it.png differ diff --git a/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.hi.png b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.hi.png new file mode 100644 index 00000000..88d5c896 Binary files /dev/null and b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.hi.png differ diff --git a/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.it.png b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.it.png new file mode 100644 index 00000000..88d5c896 Binary files /dev/null and b/translated_images/IMG_5345.3d305ee2bb4ee8040102a8d1922cdf0450f619c6824add16014a4c0887c18b1d.it.png differ diff --git a/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.hi.png b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.hi.png new file mode 100644 index 00000000..e0706533 Binary files /dev/null and b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.hi.png differ diff --git a/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.it.png b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.it.png new file mode 100644 index 00000000..e0706533 Binary files /dev/null and b/translated_images/IMG_5346.281dcc267f69c70b2bc2353b5e8289617c7bf3608f889dae8a582b9376a9ae7d.it.png differ diff --git a/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.hi.png b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.hi.png new file mode 100644 index 00000000..a1f17249 Binary files /dev/null and b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.hi.png differ diff --git a/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.it.png b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.it.png new file mode 100644 index 00000000..a1f17249 Binary files /dev/null and b/translated_images/IMG_5347.48a4a981e76910ae1c65bf75102883039be5f0ded32b73f3d09d855f5b7dc977.it.png differ diff --git a/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.hi.png b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.hi.png new file mode 100644 index 00000000..3adc61ef Binary files /dev/null and b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.hi.png differ diff --git a/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.it.png b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.it.png new file mode 100644 index 00000000..3adc61ef Binary files /dev/null and b/translated_images/IMG_5348.3961d3b444537c131299f8906dc4e2f7c3c172591ffeacb45719ec3d3718b625.it.png differ diff --git a/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.hi.png b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.hi.png new file mode 100644 index 00000000..1c3c8d53 Binary files /dev/null and b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.hi.png differ diff --git a/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.it.png b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.it.png new file mode 100644 index 00000000..1c3c8d53 Binary files /dev/null and b/translated_images/IMG_5349.1f0ec7fbf8807b3bf991dd5400cfb69ded9fe53059bd1e71934f4dbd7ff963db.it.png differ diff --git a/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.hi.jpg b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.hi.jpg new file mode 100644 index 00000000..0f4a9a38 Binary files /dev/null and b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.hi.jpg differ diff --git a/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.it.jpg b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.it.jpg new file mode 100644 index 00000000..0f4a9a38 Binary files /dev/null and b/translated_images/Roadmap.bb1dec285dda0eda691788b95ddfc96d31d76bb7649e3f04a135e4ad395f323e.it.jpg differ diff --git a/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.hi.png b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.hi.png new file mode 100644 index 00000000..32dab60c Binary files /dev/null and b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.hi.png differ diff --git a/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.it.png b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.it.png new file mode 100644 index 00000000..32dab60c Binary files /dev/null and b/translated_images/amqp.804bd4fce83301578f19af1b877f8ce87a6473a3616fb6c3f901fe4041ab6c96.it.png differ diff --git a/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.hi.png b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.hi.png new file mode 100644 index 00000000..78e9b675 Binary files /dev/null and b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.hi.png differ diff --git a/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.it.png b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.it.png new file mode 100644 index 00000000..78e9b675 Binary files /dev/null and b/translated_images/analog-sensor-voltage.3b6f3153922473997cae6f71a6110d89a020a8a1838a83fba4f97e8fa6cef3ac.it.png differ diff --git a/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.hi.png b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.hi.png new file mode 100644 index 00000000..fb87dd71 Binary files /dev/null and b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.hi.png differ diff --git a/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.it.png b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.it.png new file mode 100644 index 00000000..fb87dd71 Binary files /dev/null and b/translated_images/arducam-wio-terminal-connections.a4d5a4049bdb5ab800a2877389fc6ecf5e4ff307e6451ff56c517e6786467d0a.it.png differ diff --git a/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.hi.png b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.hi.png new file mode 100644 index 00000000..acaa9a02 Binary files /dev/null and b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.hi.png differ diff --git a/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.it.png b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.it.png new file mode 100644 index 00000000..acaa9a02 Binary files /dev/null and b/translated_images/arducam.20e4e4cbb268296570b5914e20d6c349fc42ddac9ed4e1b9deba2188204eebae.it.png differ diff --git a/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.hi.png b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.hi.png new file mode 100644 index 00000000..b6afaa8a Binary files /dev/null and b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.hi.png differ diff --git a/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.it.png b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.it.png new file mode 100644 index 00000000..b6afaa8a Binary files /dev/null and b/translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.it.png differ diff --git a/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.hi.png b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.hi.png new file mode 100644 index 00000000..18f92ede Binary files /dev/null and b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.hi.png differ diff --git a/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.it.png b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.it.png new file mode 100644 index 00000000..18f92ede Binary files /dev/null and b/translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.it.png differ diff --git a/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.hi.png b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.hi.png new file mode 100644 index 00000000..e1eb6df0 Binary files /dev/null and b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.hi.png differ diff --git a/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.it.png b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.it.png new file mode 100644 index 00000000..e1eb6df0 Binary files /dev/null and b/translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.it.png differ diff --git a/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.hi.png b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.hi.png new file mode 100644 index 00000000..dfcfde45 Binary files /dev/null and b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.hi.png differ diff --git a/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.it.png b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.it.png new file mode 100644 index 00000000..dfcfde45 Binary files /dev/null and b/translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.it.png differ diff --git a/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.hi.png b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.hi.png new file mode 100644 index 00000000..44af1896 Binary files /dev/null and b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.hi.png differ diff --git a/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.it.png b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.it.png new file mode 100644 index 00000000..44af1896 Binary files /dev/null and b/translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.it.png differ diff --git a/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.hi.png b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.hi.png new file mode 100644 index 00000000..6d749e6c Binary files /dev/null and b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.hi.png differ diff --git a/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.it.png b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.it.png new file mode 100644 index 00000000..6d749e6c Binary files /dev/null and b/translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.it.png differ diff --git a/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.hi.png b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.hi.png new file mode 100644 index 00000000..7485e36c Binary files /dev/null and b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.hi.png differ diff --git a/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.it.png b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.it.png new file mode 100644 index 00000000..7485e36c Binary files /dev/null and b/translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.it.png differ diff --git a/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.hi.png b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.hi.png new file mode 100644 index 00000000..0f499097 Binary files /dev/null and b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.hi.png differ diff --git a/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.it.png b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.it.png new file mode 100644 index 00000000..0f499097 Binary files /dev/null and b/translated_images/azure-maps-logo.35d01dcfbd81fe6140e94257aaa1538f785a58c91576d14e0ebe7a2f6c694b99.it.png differ diff --git a/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.hi.png b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.hi.png new file mode 100644 index 00000000..710c440c Binary files /dev/null and b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.hi.png differ diff --git a/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.it.png b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.it.png new file mode 100644 index 00000000..710c440c Binary files /dev/null and b/translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.it.png differ diff --git a/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.hi.png b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.hi.png new file mode 100644 index 00000000..24cecced Binary files /dev/null and b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.hi.png differ diff --git a/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.it.png b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.it.png new file mode 100644 index 00000000..24cecced Binary files /dev/null and b/translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.it.png differ diff --git a/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.hi.png b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.hi.png new file mode 100644 index 00000000..b36025d9 Binary files /dev/null and b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.hi.png differ diff --git a/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.it.png b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.it.png new file mode 100644 index 00000000..b36025d9 Binary files /dev/null and b/translated_images/azure-speech-logo.a1f08c4befb0159f2cb5d692d3baf5b599e7b44759d316da907bda1508f46a4a.it.png differ diff --git a/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.hi.png b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.hi.png new file mode 100644 index 00000000..b21a4bed Binary files /dev/null and b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.hi.png differ diff --git a/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.it.png b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.it.png new file mode 100644 index 00000000..b21a4bed Binary files /dev/null and b/translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.it.png differ diff --git a/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.hi.png b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.hi.png new file mode 100644 index 00000000..8da6f9a4 Binary files /dev/null and b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.hi.png differ diff --git a/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.it.png b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.it.png new file mode 100644 index 00000000..8da6f9a4 Binary files /dev/null and b/translated_images/azure-translator-logo.c6ed3a4a433edfd2f11577eca105412c50b8396b194cbbd730723dd1d0793bcd.it.png differ diff --git a/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.hi.jpg b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.hi.jpg new file mode 100644 index 00000000..437f3d07 Binary files /dev/null and b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.hi.jpg differ diff --git a/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.it.jpg b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.it.jpg new file mode 100644 index 00000000..437f3d07 Binary files /dev/null and b/translated_images/banana-arducam.be1b32d4267a8194b0fd042362e56faa431da9cd4af172051b37243ea9be0256.it.jpg differ diff --git a/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.hi.png b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.hi.png new file mode 100644 index 00000000..cc61fb13 Binary files /dev/null and b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.hi.png differ diff --git a/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.it.png b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.it.png new file mode 100644 index 00000000..cc61fb13 Binary files /dev/null and b/translated_images/banana-picture-compare.174df164dc326a42cf7fb051a7497e6113c620e91552d92ca914220305d47d9a.it.png differ diff --git a/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.hi.png b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.hi.png new file mode 100644 index 00000000..3472b1d9 Binary files /dev/null and b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.hi.png differ diff --git a/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.it.png b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.it.png new file mode 100644 index 00000000..3472b1d9 Binary files /dev/null and b/translated_images/banana-ripe-1.6ed72365ffc9230064fbaefdb698bde74529ad5b3c747a4a28421b534730fa5f.it.png differ diff --git a/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.hi.png b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.hi.png new file mode 100644 index 00000000..0bbca602 Binary files /dev/null and b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.hi.png differ diff --git a/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.it.png b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.it.png new file mode 100644 index 00000000..0bbca602 Binary files /dev/null and b/translated_images/banana-ripe-1.780e9be3a60d8879826126ee1e84e135ffa20ec91697bb759daf7ba0b76c811b.it.png differ diff --git a/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.hi.png b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.hi.png new file mode 100644 index 00000000..b5775adc Binary files /dev/null and b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.hi.png differ diff --git a/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.it.png b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.it.png new file mode 100644 index 00000000..b5775adc Binary files /dev/null and b/translated_images/banana-ripe-10.c3d98eb280e7464ffa36da1fa18413db4fd032da973b098bb4978d6d99c1a3af.it.png differ diff --git a/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.hi.png b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.hi.png new file mode 100644 index 00000000..bc58477a Binary files /dev/null and b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.hi.png differ diff --git a/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.it.png b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.it.png new file mode 100644 index 00000000..bc58477a Binary files /dev/null and b/translated_images/banana-ripe-11.3d932f292b95b9a202082ce75f5b52ecaf43718721661810b53f7a5a2c4b4133.it.png differ diff --git a/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.hi.png b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.hi.png new file mode 100644 index 00000000..1b7a40f4 Binary files /dev/null and b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.hi.png differ diff --git a/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.it.png b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.it.png new file mode 100644 index 00000000..1b7a40f4 Binary files /dev/null and b/translated_images/banana-ripe-12.9f87e663b9da6c8525f3ce63c5c0a1c095e42675e2a6af9b0fddb14ebb1e0b4b.it.png differ diff --git a/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.hi.png b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.hi.png new file mode 100644 index 00000000..011b07a3 Binary files /dev/null and b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.hi.png differ diff --git a/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.it.png b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.it.png new file mode 100644 index 00000000..011b07a3 Binary files /dev/null and b/translated_images/banana-ripe-13.b7402e05160f454309533a578849d7e79f92dd70799428943d7211c2fbb82465.it.png differ diff --git a/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.hi.png b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.hi.png new file mode 100644 index 00000000..7f9d24ef Binary files /dev/null and b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.hi.png differ diff --git a/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.it.png b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.it.png new file mode 100644 index 00000000..7f9d24ef Binary files /dev/null and b/translated_images/banana-ripe-14.85cf309aa702cfa870286a5f8838ee5875a655074a982bafe5b8d32d4d5819f2.it.png differ diff --git a/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.hi.png b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.hi.png new file mode 100644 index 00000000..0c6a7067 Binary files /dev/null and b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.hi.png differ diff --git a/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.it.png b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.it.png new file mode 100644 index 00000000..0c6a7067 Binary files /dev/null and b/translated_images/banana-ripe-15.933412eb14a3f8e419c764c8157d1e5f25256972a8dcf450aa630b8c007c8c3d.it.png differ diff --git a/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.hi.png b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.hi.png new file mode 100644 index 00000000..8f7968a5 Binary files /dev/null and b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.hi.png differ diff --git a/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.it.png b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.it.png new file mode 100644 index 00000000..8f7968a5 Binary files /dev/null and b/translated_images/banana-ripe-16.781a68a01401f89e5e523c88e659a0f9697b7de378571c91e597edc0d0c2eb07.it.png differ diff --git a/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.hi.png b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.hi.png new file mode 100644 index 00000000..20c6036f Binary files /dev/null and b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.hi.png differ diff --git a/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.it.png b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.it.png new file mode 100644 index 00000000..20c6036f Binary files /dev/null and b/translated_images/banana-ripe-17.f8e2853a40d3ac450e290036792b75ac4b8da5883536478722fb336d5f66517e.it.png differ diff --git a/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.hi.png b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.hi.png new file mode 100644 index 00000000..f077b6e9 Binary files /dev/null and b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.hi.png differ diff --git a/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.it.png b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.it.png new file mode 100644 index 00000000..f077b6e9 Binary files /dev/null and b/translated_images/banana-ripe-18.3d05f5f78ecf6f0d74aecdafb8e415851a5333e5dbc016ac1870ab5e4c383b07.it.png differ diff --git a/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.hi.png b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.hi.png new file mode 100644 index 00000000..484206d5 Binary files /dev/null and b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.hi.png differ diff --git a/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.it.png b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.it.png new file mode 100644 index 00000000..484206d5 Binary files /dev/null and b/translated_images/banana-ripe-19.ac3b0fc6cf6fdfd5523227bc246c915b228bc3d4bc1c72f6612723ed889023b5.it.png differ diff --git a/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.hi.png b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.hi.png new file mode 100644 index 00000000..9fa156e2 Binary files /dev/null and b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.hi.png differ diff --git a/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.it.png b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.it.png new file mode 100644 index 00000000..9fa156e2 Binary files /dev/null and b/translated_images/banana-ripe-2.8ab96da692df69f1c78bd3a93acfdb17bc292ac964a3f3bac9249ba1dd1681c3.it.png differ diff --git a/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.hi.png b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.hi.png new file mode 100644 index 00000000..b0813972 Binary files /dev/null and b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.hi.png differ diff --git a/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.it.png b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.it.png new file mode 100644 index 00000000..b0813972 Binary files /dev/null and b/translated_images/banana-ripe-2.96ddc53114c5f020a328b264174eef43d2096620c6b10ff5189e99674c1dfa8c.it.png differ diff --git a/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.hi.png b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.hi.png new file mode 100644 index 00000000..4f2da8dc Binary files /dev/null and b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.hi.png differ diff --git a/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.it.png b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.it.png new file mode 100644 index 00000000..4f2da8dc Binary files /dev/null and b/translated_images/banana-ripe-20.a4d0ad33a7e6f037ac9276dc751ae62d56d3cc16e625837197ef49da426bc3c8.it.png differ diff --git a/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.hi.png b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.hi.png new file mode 100644 index 00000000..8ae3904c Binary files /dev/null and b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.hi.png differ diff --git a/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.it.png b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.it.png new file mode 100644 index 00000000..8ae3904c Binary files /dev/null and b/translated_images/banana-ripe-21.07e03d64f265d55dfe3b304df3e36f06140b87f80ae2cadd22a7736e2855eb8f.it.png differ diff --git a/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.hi.png b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.hi.png new file mode 100644 index 00000000..ea5cbe30 Binary files /dev/null and b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.hi.png differ diff --git a/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.it.png b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.it.png new file mode 100644 index 00000000..ea5cbe30 Binary files /dev/null and b/translated_images/banana-ripe-22.a63c05aeb7f866fc64b6ac04e6fa68e1d1a22d729ad16d9fadf3357df97654a3.it.png differ diff --git a/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.hi.png b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.hi.png new file mode 100644 index 00000000..eab9fb03 Binary files /dev/null and b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.hi.png differ diff --git a/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.it.png b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.it.png new file mode 100644 index 00000000..eab9fb03 Binary files /dev/null and b/translated_images/banana-ripe-23.6f3364afcab19e571497cb5a3fa2b0c603a303beb31034cb82ae25635f4cc005.it.png differ diff --git a/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.hi.png b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.hi.png new file mode 100644 index 00000000..c49c0459 Binary files /dev/null and b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.hi.png differ diff --git a/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.it.png b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.it.png new file mode 100644 index 00000000..c49c0459 Binary files /dev/null and b/translated_images/banana-ripe-24.ff2c02cc80a9c4301d1f851af0a96f414fcc844f912ea4bea902877c9d6978f6.it.png differ diff --git a/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.hi.png b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.hi.png new file mode 100644 index 00000000..127b0257 Binary files /dev/null and b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.hi.png differ diff --git a/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.it.png b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.it.png new file mode 100644 index 00000000..127b0257 Binary files /dev/null and b/translated_images/banana-ripe-25.65ce63418cdc4de2d1d29d0fd35401a9f99e967938e01c3578f13a6b6812ae50.it.png differ diff --git a/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.hi.png b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.hi.png new file mode 100644 index 00000000..0b528799 Binary files /dev/null and b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.hi.png differ diff --git a/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.it.png b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.it.png new file mode 100644 index 00000000..0b528799 Binary files /dev/null and b/translated_images/banana-ripe-3.4fae05a0a1d2b5f010998afee52fb77a113453a95331c76eb4b509c14d5cb5d7.it.png differ diff --git a/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.hi.png b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.hi.png new file mode 100644 index 00000000..e5b04c65 Binary files /dev/null and b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.hi.png differ diff --git a/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.it.png b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.it.png new file mode 100644 index 00000000..e5b04c65 Binary files /dev/null and b/translated_images/banana-ripe-5.c762086879ccec4c5402fb5dd5387f4ee4c208de3ec13fd69a5461ef36cde34a.it.png differ diff --git a/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.hi.png b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.hi.png new file mode 100644 index 00000000..46543926 Binary files /dev/null and b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.hi.png differ diff --git a/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.it.png b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.it.png new file mode 100644 index 00000000..46543926 Binary files /dev/null and b/translated_images/banana-ripe-6.5131bcbf492980cb737c3658b96f6ff3381ced4cd6505588b05bd95d82965c49.it.png differ diff --git a/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.hi.png b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.hi.png new file mode 100644 index 00000000..46e99668 Binary files /dev/null and b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.hi.png differ diff --git a/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.it.png b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.it.png new file mode 100644 index 00000000..46e99668 Binary files /dev/null and b/translated_images/banana-ripe-7.5fc18dfe7b7ae9dc5afe27cc6c0ce162c819b78b69b05f6f9c1636d5d1b82edc.it.png differ diff --git a/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.hi.png b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.hi.png new file mode 100644 index 00000000..c012d47d Binary files /dev/null and b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.hi.png differ diff --git a/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.it.png b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.it.png new file mode 100644 index 00000000..c012d47d Binary files /dev/null and b/translated_images/banana-ripe-8.dba1d33bd34d4830201c15a9c35c56fde4b1a45dc7dc5e3a7def9986bf1b6c28.it.png differ diff --git a/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.hi.png b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.hi.png new file mode 100644 index 00000000..fa44061a Binary files /dev/null and b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.hi.png differ diff --git a/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.it.png b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.it.png new file mode 100644 index 00000000..fa44061a Binary files /dev/null and b/translated_images/banana-ripe-9.32f91462c8b0e2d3666f49a12afd84462212c5834835f988b3c37441c0493952.it.png differ diff --git a/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.hi.png b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.hi.png new file mode 100644 index 00000000..e499b2fd Binary files /dev/null and b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.hi.png differ diff --git a/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.it.png b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.it.png new file mode 100644 index 00000000..e499b2fd Binary files /dev/null and b/translated_images/banana-training-images.530eb203346d73bc23b8b990fb4609470bf4ff7c942ccc13d4cfffeed9be1ad4.it.png differ diff --git a/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.hi.png b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.hi.png new file mode 100644 index 00000000..66e9927a Binary files /dev/null and b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.hi.png differ diff --git a/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.it.png b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.it.png new file mode 100644 index 00000000..66e9927a Binary files /dev/null and b/translated_images/banana-unripe-1.910c8606a300fa2014a0e0adb31348effd6e0fdd5760fdfe80b8e69533bac6f7.it.png differ diff --git a/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.hi.png b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.hi.png new file mode 100644 index 00000000..e512cf63 Binary files /dev/null and b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.hi.png differ diff --git a/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.it.png b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.it.png new file mode 100644 index 00000000..e512cf63 Binary files /dev/null and b/translated_images/banana-unripe-1.b2c7051d9c8a4e617be0425bea42775d16f896f3a183344e9038da2d1fb81dea.it.png differ diff --git a/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.hi.png b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.hi.png new file mode 100644 index 00000000..89e41b8a Binary files /dev/null and b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.hi.png differ diff --git a/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.it.png b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.it.png new file mode 100644 index 00000000..89e41b8a Binary files /dev/null and b/translated_images/banana-unripe-10.38dab0db918a24870e655b62e7f3af030eaebe5bcfb7cfebbfb010637b46ba44.it.png differ diff --git a/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.hi.png b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.hi.png new file mode 100644 index 00000000..257c3e55 Binary files /dev/null and b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.hi.png differ diff --git a/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.it.png b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.it.png new file mode 100644 index 00000000..257c3e55 Binary files /dev/null and b/translated_images/banana-unripe-11.ec8d0eefe63e10b953579d18d4fdd9d89cedc247749ec1d11fdbe49a43f1bc90.it.png differ diff --git a/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.hi.png b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.hi.png new file mode 100644 index 00000000..85a581ed Binary files /dev/null and b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.hi.png differ diff --git a/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.it.png b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.it.png new file mode 100644 index 00000000..85a581ed Binary files /dev/null and b/translated_images/banana-unripe-12.b95a088ccae935db01b47786dac829cb356feb5d4dbfcf8d91e000e9ed3be7a2.it.png differ diff --git a/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.hi.png b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.hi.png new file mode 100644 index 00000000..c07f67c3 Binary files /dev/null and b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.hi.png differ diff --git a/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.it.png b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.it.png new file mode 100644 index 00000000..c07f67c3 Binary files /dev/null and b/translated_images/banana-unripe-13.37e5a7cac5aa0920343a6dd17dc720499d9f9b7c990cf4bc002f681216a545b7.it.png differ diff --git a/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.hi.png b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.hi.png new file mode 100644 index 00000000..c598913b Binary files /dev/null and b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.hi.png differ diff --git a/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.it.png b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.it.png new file mode 100644 index 00000000..c598913b Binary files /dev/null and b/translated_images/banana-unripe-14.d19ddd6bbf63a2591db0d88a6c81e17d2186dee04b9bb4ff60031009fc0cce0a.it.png differ diff --git a/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.hi.png b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.hi.png new file mode 100644 index 00000000..a630a6f3 Binary files /dev/null and b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.hi.png differ diff --git a/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.it.png b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.it.png new file mode 100644 index 00000000..a630a6f3 Binary files /dev/null and b/translated_images/banana-unripe-15.274e48544326077a58c0e00e04e98c7abe04bc473caaab64fe3154c551d8a0a8.it.png differ diff --git a/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.hi.png b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.hi.png new file mode 100644 index 00000000..f63ad48d Binary files /dev/null and b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.hi.png differ diff --git a/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.it.png b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.it.png new file mode 100644 index 00000000..f63ad48d Binary files /dev/null and b/translated_images/banana-unripe-16.bd058f64bd7ec014d10bdeb9da39568aeb5871908b5c2a6376a5f97d3101c273.it.png differ diff --git a/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.hi.png b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.hi.png new file mode 100644 index 00000000..73c0aea6 Binary files /dev/null and b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.hi.png differ diff --git a/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.it.png b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.it.png new file mode 100644 index 00000000..73c0aea6 Binary files /dev/null and b/translated_images/banana-unripe-17.408382d679bfa079fbe89e269fbc05a2602d2f980834601380633a5471c72396.it.png differ diff --git a/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.hi.png b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.hi.png new file mode 100644 index 00000000..0768efbc Binary files /dev/null and b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.hi.png differ diff --git a/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.it.png b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.it.png new file mode 100644 index 00000000..0768efbc Binary files /dev/null and b/translated_images/banana-unripe-18.39c0eb79d7b3b9baf71858801fb8cb8b01e395289bab8c7091a57a97d1dfa075.it.png differ diff --git a/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.hi.png b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.hi.png new file mode 100644 index 00000000..a6c3afe8 Binary files /dev/null and b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.hi.png differ diff --git a/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.it.png b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.it.png new file mode 100644 index 00000000..a6c3afe8 Binary files /dev/null and b/translated_images/banana-unripe-19.e61e6d7efaf2d8c81a25acbff9c40f018b78c3c240c8e384d54da374eda70f9b.it.png differ diff --git a/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.hi.png b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.hi.png new file mode 100644 index 00000000..eed10ecb Binary files /dev/null and b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.hi.png differ diff --git a/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.it.png b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.it.png new file mode 100644 index 00000000..eed10ecb Binary files /dev/null and b/translated_images/banana-unripe-2.43a73b544521afc7efd54de90fd585f314844de67b16509fff2ab80c05eec7bd.it.png differ diff --git a/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.hi.png b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.hi.png new file mode 100644 index 00000000..4c086050 Binary files /dev/null and b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.hi.png differ diff --git a/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.it.png b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.it.png new file mode 100644 index 00000000..4c086050 Binary files /dev/null and b/translated_images/banana-unripe-2.9591d1a6aa27deebbaec0955b227bbae20d6bfae43f29d832bd412bbafa45bfd.it.png differ diff --git a/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.hi.png b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.hi.png new file mode 100644 index 00000000..9f641588 Binary files /dev/null and b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.hi.png differ diff --git a/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.it.png b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.it.png new file mode 100644 index 00000000..9f641588 Binary files /dev/null and b/translated_images/banana-unripe-20.85b7a74eaab5634e769fe2fec57405201513094c400f71e16d75cd79bde092ab.it.png differ diff --git a/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.hi.png b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.hi.png new file mode 100644 index 00000000..9404843f Binary files /dev/null and b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.hi.png differ diff --git a/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.it.png b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.it.png new file mode 100644 index 00000000..9404843f Binary files /dev/null and b/translated_images/banana-unripe-21.ccc1333439b344bc502fbfa9b60e5e9013a4d57ba539ba87000ccd69dc0675e2.it.png differ diff --git a/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.hi.png b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.hi.png new file mode 100644 index 00000000..9636ac68 Binary files /dev/null and b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.hi.png differ diff --git a/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.it.png b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.it.png new file mode 100644 index 00000000..9636ac68 Binary files /dev/null and b/translated_images/banana-unripe-22.27dff4b438163080fcace0af6f24b8c9866b76a15269844e9ed1b722ae2220e7.it.png differ diff --git a/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.hi.png b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.hi.png new file mode 100644 index 00000000..38a2b35d Binary files /dev/null and b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.hi.png differ diff --git a/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.it.png b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.it.png new file mode 100644 index 00000000..38a2b35d Binary files /dev/null and b/translated_images/banana-unripe-23.c4c9067f23370e90c5156d7659a0d17590d952e2defd6550aeded84e847c1e4b.it.png differ diff --git a/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.hi.png b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.hi.png new file mode 100644 index 00000000..cd09e177 Binary files /dev/null and b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.hi.png differ diff --git a/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.it.png b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.it.png new file mode 100644 index 00000000..cd09e177 Binary files /dev/null and b/translated_images/banana-unripe-24.6f0b781c309da62f71147fcc87699967bef10c57a794029ede2eb0d1d88e4b73.it.png differ diff --git a/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.hi.png b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.hi.png new file mode 100644 index 00000000..4cc4f4bc Binary files /dev/null and b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.hi.png differ diff --git a/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.it.png b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.it.png new file mode 100644 index 00000000..4cc4f4bc Binary files /dev/null and b/translated_images/banana-unripe-25.21d553d84880ac4ff73128909d01c79c4544424d218f740482da46bdae46f74b.it.png differ diff --git a/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.hi.png b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.hi.png new file mode 100644 index 00000000..33e03220 Binary files /dev/null and b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.hi.png differ diff --git a/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.it.png b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.it.png new file mode 100644 index 00000000..33e03220 Binary files /dev/null and b/translated_images/banana-unripe-26.823c48b61feb1d5c319e9cf54f5e7c2bb43f91e781bf42d57f386d0dabf3fd12.it.png differ diff --git a/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.hi.png b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.hi.png new file mode 100644 index 00000000..489d49e3 Binary files /dev/null and b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.hi.png differ diff --git a/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.it.png b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.it.png new file mode 100644 index 00000000..489d49e3 Binary files /dev/null and b/translated_images/banana-unripe-27.f98fd272deeb02d9b6771340fe6da2de82db652ade770d9eca14ba6be2d0ad17.it.png differ diff --git a/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.hi.png b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.hi.png new file mode 100644 index 00000000..80b39b63 Binary files /dev/null and b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.hi.png differ diff --git a/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.it.png b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.it.png new file mode 100644 index 00000000..80b39b63 Binary files /dev/null and b/translated_images/banana-unripe-28.5331ba409ce41c07caa09d72d6ad7375b5a5b3d7609fcabdaa82d9799439fd21.it.png differ diff --git a/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.hi.png b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.hi.png new file mode 100644 index 00000000..2404a4ce Binary files /dev/null and b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.hi.png differ diff --git a/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.it.png b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.it.png new file mode 100644 index 00000000..2404a4ce Binary files /dev/null and b/translated_images/banana-unripe-29.84e126f389bf627ed464abdf8127f3a58e8b0131b5b1b9ee038de51703c31657.it.png differ diff --git a/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.hi.png b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.hi.png new file mode 100644 index 00000000..f884cc81 Binary files /dev/null and b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.hi.png differ diff --git a/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.it.png b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.it.png new file mode 100644 index 00000000..f884cc81 Binary files /dev/null and b/translated_images/banana-unripe-3.896df8fb2c3b8f51f71b212645fc5314b591a033938208000839642858ddcabd.it.png differ diff --git a/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.hi.png b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.hi.png new file mode 100644 index 00000000..9f649bd1 Binary files /dev/null and b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.hi.png differ diff --git a/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.it.png b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.it.png new file mode 100644 index 00000000..9f649bd1 Binary files /dev/null and b/translated_images/banana-unripe-4.483e740d6fd7b5a671cb49ad1b0f2c35f1637f86ccb9746bb4cc3b59ab752bf7.it.png differ diff --git a/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.hi.png b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.hi.png new file mode 100644 index 00000000..03e1fa8c Binary files /dev/null and b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.hi.png differ diff --git a/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.it.png b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.it.png new file mode 100644 index 00000000..03e1fa8c Binary files /dev/null and b/translated_images/banana-unripe-5.e9923cf1ffcfc1c93e8c2aeb184bd071566742b738b671ab9cedcd5708239a58.it.png differ diff --git a/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.hi.png b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.hi.png new file mode 100644 index 00000000..983f836f Binary files /dev/null and b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.hi.png differ diff --git a/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.it.png b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.it.png new file mode 100644 index 00000000..983f836f Binary files /dev/null and b/translated_images/banana-unripe-6.e3a73307558caecc9aac5ae80bbe37ca38f105e2bd7311afab61ee1014fc6c0e.it.png differ diff --git a/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.hi.png b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.hi.png new file mode 100644 index 00000000..2aede939 Binary files /dev/null and b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.hi.png differ diff --git a/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.it.png b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.it.png new file mode 100644 index 00000000..2aede939 Binary files /dev/null and b/translated_images/banana-unripe-7.634ca89acc17d68f8423b1a13f1bec6bdbd5135f0149c6cfaa53d7b7d5fa1c65.it.png differ diff --git a/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.hi.png b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.hi.png new file mode 100644 index 00000000..7bc7bab2 Binary files /dev/null and b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.hi.png differ diff --git a/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.it.png b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.it.png new file mode 100644 index 00000000..7bc7bab2 Binary files /dev/null and b/translated_images/banana-unripe-8.75720b4cdebac8c36964c86e051ea962ab02e530abec3f577bd77fdbc34d7f9d.it.png differ diff --git a/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.hi.png b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.hi.png new file mode 100644 index 00000000..4ffd862a Binary files /dev/null and b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.hi.png differ diff --git a/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.it.png b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.it.png new file mode 100644 index 00000000..4ffd862a Binary files /dev/null and b/translated_images/banana-unripe-9.e8076983351d2f54cfb246bc01090e7016b63fb8d81396822cbe5366c1b88b7f.it.png differ diff --git a/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.hi.png b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.hi.png new file mode 100644 index 00000000..ef506579 Binary files /dev/null and b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.hi.png differ diff --git a/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.it.png b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.it.png new file mode 100644 index 00000000..ef506579 Binary files /dev/null and b/translated_images/banana-unripe-quick-test-prediction.dae9b5e1c4ef7c64886422438850ea14f0be6ac918c217ea3b255c685abfabe7.it.png differ diff --git a/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.hi.png b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.hi.png new file mode 100644 index 00000000..ddf79213 Binary files /dev/null and b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.hi.png differ diff --git a/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.it.png b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.it.png new file mode 100644 index 00000000..ddf79213 Binary files /dev/null and b/translated_images/bananas-ripe-vs-unripe-predictions.8d0e2034014aa50ece4e4589e724b142da0681f35470fe3db3f7d51240f69c85.it.png differ diff --git a/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.hi.png b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.hi.png new file mode 100644 index 00000000..1796bcce Binary files /dev/null and b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.hi.png differ diff --git a/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.it.png b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.it.png new file mode 100644 index 00000000..1796bcce Binary files /dev/null and b/translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.it.png differ diff --git a/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.hi.png b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.hi.png new file mode 100644 index 00000000..ab763666 Binary files /dev/null and b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.hi.png differ diff --git a/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.it.png b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.it.png new file mode 100644 index 00000000..ab763666 Binary files /dev/null and b/translated_images/bing-translate.348aa796d6efe2a92f41ea74a5cf42bb4c63d6faaa08e7f46924e072a35daa48.it.png differ diff --git a/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.hi.png b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.hi.png new file mode 100644 index 00000000..013f247d Binary files /dev/null and b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.hi.png differ diff --git a/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.it.png b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.it.png new file mode 100644 index 00000000..013f247d Binary files /dev/null and b/translated_images/bounding-box.1420a7ea0d3d15f71e1ffb5cf4b2271d184fac051f990abc541975168d163684.it.png differ diff --git a/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.hi.png b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.hi.png new file mode 100644 index 00000000..fd1b7753 Binary files /dev/null and b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.hi.png differ diff --git a/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.it.png b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.it.png new file mode 100644 index 00000000..fd1b7753 Binary files /dev/null and b/translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.it.png differ diff --git a/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.hi.png b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.hi.png new file mode 100644 index 00000000..55154b84 Binary files /dev/null and b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.hi.png differ diff --git a/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.it.png b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.it.png new file mode 100644 index 00000000..55154b84 Binary files /dev/null and b/translated_images/button-with-digital.3749edea8eb885af0303f7ea29e2389d704661c0ca3225b08ff0cbc22f332059.it.png differ diff --git a/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.hi.png b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.hi.png new file mode 100644 index 00000000..306d6f14 Binary files /dev/null and b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.hi.png differ diff --git a/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.it.png b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.it.png new file mode 100644 index 00000000..306d6f14 Binary files /dev/null and b/translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.it.png differ diff --git a/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.hi.png b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.hi.png new file mode 100644 index 00000000..dfb03646 Binary files /dev/null and b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.hi.png differ diff --git a/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.it.png b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.it.png new file mode 100644 index 00000000..dfb03646 Binary files /dev/null and b/translated_images/chart-soil-moisture-relay.fbb391236d34a64d0abf1df396e9197e0a24df14150620b9cc820a64a55c9326.it.png differ diff --git a/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.hi.png b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.hi.png new file mode 100644 index 00000000..05208120 Binary files /dev/null and b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.hi.png differ diff --git a/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.it.png b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.it.png new file mode 100644 index 00000000..05208120 Binary files /dev/null and b/translated_images/chart-soil-moisture.fd6d9d0cdc0b5f75e78038ecb8945dfc84b38851359de99d84b16e3336d6d7c2.it.png differ diff --git a/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.hi.jpg b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.hi.jpg new file mode 100644 index 00000000..e78b8c6c Binary files /dev/null and b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.hi.jpg differ diff --git a/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.it.jpg b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.it.jpg new file mode 100644 index 00000000..e78b8c6c Binary files /dev/null and b/translated_images/child-watering-garden.9a5d3f1bfe6d0d8d488291e8189899b2c59f82abaa487f18d404217a25e671e7.it.jpg differ diff --git a/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.hi.png b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.hi.png new file mode 100644 index 00000000..0b221a3f Binary files /dev/null and b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.hi.png differ diff --git a/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.it.png b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.it.png new file mode 100644 index 00000000..0b221a3f Binary files /dev/null and b/translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.it.png differ diff --git a/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.hi.png b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.hi.png new file mode 100644 index 00000000..576d3f84 Binary files /dev/null and b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.hi.png differ diff --git a/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.it.png b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.it.png new file mode 100644 index 00000000..576d3f84 Binary files /dev/null and b/translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.it.png differ diff --git a/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.hi.png b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.hi.png new file mode 100644 index 00000000..297ccc5e Binary files /dev/null and b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.hi.png differ diff --git a/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.it.png b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.it.png new file mode 100644 index 00000000..297ccc5e Binary files /dev/null and b/translated_images/cmos-sensor.75f9cd74decb137149a4c9ea825251a4549497d67c0ae2776159e6102bb53aa9.it.png differ diff --git a/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.hi.png b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.hi.png new file mode 100644 index 00000000..89bd1ba6 Binary files /dev/null and b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.hi.png differ diff --git a/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.it.png b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.it.png new file mode 100644 index 00000000..89bd1ba6 Binary files /dev/null and b/translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.it.png differ diff --git a/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.hi.jpg b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.hi.jpg new file mode 100644 index 00000000..383794f2 Binary files /dev/null and b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.hi.jpg differ diff --git a/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.it.jpg b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.it.jpg new file mode 100644 index 00000000..383794f2 Binary files /dev/null and b/translated_images/condenser-mic.6f6ed5b76ca19e0ec3fd0c544601542d4479a6cb7565db336de49fbbf69f623e.it.jpg differ diff --git a/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.hi.png b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.hi.png new file mode 100644 index 00000000..f28538e1 Binary files /dev/null and b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.hi.png differ diff --git a/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.it.png b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.it.png new file mode 100644 index 00000000..f28538e1 Binary files /dev/null and b/translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.it.png differ diff --git a/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.hi.png b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.hi.png new file mode 100644 index 00000000..39431760 Binary files /dev/null and b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.hi.png differ diff --git a/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.it.png b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.it.png new file mode 100644 index 00000000..39431760 Binary files /dev/null and b/translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.it.png differ diff --git a/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.hi.png b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.hi.png new file mode 100644 index 00000000..46a26d45 Binary files /dev/null and b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.hi.png differ diff --git a/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.it.png b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.it.png new file mode 100644 index 00000000..46a26d45 Binary files /dev/null and b/translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.it.png differ diff --git a/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.hi.png b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.hi.png new file mode 100644 index 00000000..6f70239b Binary files /dev/null and b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.hi.png differ diff --git a/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.it.png b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.it.png new file mode 100644 index 00000000..6f70239b Binary files /dev/null and b/translated_images/counterfit-camera-options.eb3bd5150a8e7dffbf24bc5bcaba0cf2cdef95fbe6bbe393695d173817d6b8df.it.png differ diff --git a/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.hi.png b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.hi.png new file mode 100644 index 00000000..c5cd51da Binary files /dev/null and b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.hi.png differ diff --git a/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.it.png b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.it.png new file mode 100644 index 00000000..c5cd51da Binary files /dev/null and b/translated_images/counterfit-camera.001ec52194c8ee5d3f617173da2c79e1df903d10882adc625cbfc493525125d4.it.png differ diff --git a/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.hi.png b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.hi.png new file mode 100644 index 00000000..0328b3ea Binary files /dev/null and b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.hi.png differ diff --git a/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.it.png b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.it.png new file mode 100644 index 00000000..0328b3ea Binary files /dev/null and b/translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.it.png differ diff --git a/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.hi.png b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.hi.png new file mode 100644 index 00000000..b3d0d223 Binary files /dev/null and b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.hi.png differ diff --git a/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.it.png b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.it.png new file mode 100644 index 00000000..b3d0d223 Binary files /dev/null and b/translated_images/counterfit-create-camera.a5de97f59c0bd3cbe0416d7e89a3cfe86d19fbae05c641c53a91286412af0a34.it.png differ diff --git a/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.hi.png b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.hi.png new file mode 100644 index 00000000..0729dbce Binary files /dev/null and b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.hi.png differ diff --git a/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.it.png b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.it.png new file mode 100644 index 00000000..0729dbce Binary files /dev/null and b/translated_images/counterfit-create-distance-sensor.967c9fb98f27888d95920c9784d004c972490eb71f70397fe13bd70a79a879a3.it.png differ diff --git a/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.hi.png b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.hi.png new file mode 100644 index 00000000..2e3adef5 Binary files /dev/null and b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.hi.png differ diff --git a/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.it.png b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.it.png new file mode 100644 index 00000000..2e3adef5 Binary files /dev/null and b/translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.it.png differ diff --git a/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.hi.png b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.hi.png new file mode 100644 index 00000000..4e9aa9b4 Binary files /dev/null and b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.hi.png differ diff --git a/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.it.png b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.it.png new file mode 100644 index 00000000..4e9aa9b4 Binary files /dev/null and b/translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.it.png differ diff --git a/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.hi.png b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.hi.png new file mode 100644 index 00000000..766527c0 Binary files /dev/null and b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.hi.png differ diff --git a/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.it.png b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.it.png new file mode 100644 index 00000000..766527c0 Binary files /dev/null and b/translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.it.png differ diff --git a/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.hi.png b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.hi.png new file mode 100644 index 00000000..f34ad7c6 Binary files /dev/null and b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.hi.png differ diff --git a/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.it.png b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.it.png new file mode 100644 index 00000000..f34ad7c6 Binary files /dev/null and b/translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.it.png differ diff --git a/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.hi.png b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.hi.png new file mode 100644 index 00000000..403bb436 Binary files /dev/null and b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.hi.png differ diff --git a/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.it.png b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.it.png new file mode 100644 index 00000000..403bb436 Binary files /dev/null and b/translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.it.png differ diff --git a/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.hi.png b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.hi.png new file mode 100644 index 00000000..07398a97 Binary files /dev/null and b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.hi.png differ diff --git a/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.it.png b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.it.png new file mode 100644 index 00000000..07398a97 Binary files /dev/null and b/translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.it.png differ diff --git a/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.hi.png b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.hi.png new file mode 100644 index 00000000..83d0a29e Binary files /dev/null and b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.hi.png differ diff --git a/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.it.png b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.it.png new file mode 100644 index 00000000..83d0a29e Binary files /dev/null and b/translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.it.png differ diff --git a/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.hi.png b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.hi.png new file mode 100644 index 00000000..cdd566f5 Binary files /dev/null and b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.hi.png differ diff --git a/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.it.png b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.it.png new file mode 100644 index 00000000..cdd566f5 Binary files /dev/null and b/translated_images/counterfit-distance-sensor.079eefeeea0b68afc36431ce8fcbe2f09a7e4916ed1cd5cb30e696db53bc18fa.it.png differ diff --git a/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.hi.png b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.hi.png new file mode 100644 index 00000000..50caa7a8 Binary files /dev/null and b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.hi.png differ diff --git a/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.it.png b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.it.png new file mode 100644 index 00000000..50caa7a8 Binary files /dev/null and b/translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.it.png differ diff --git a/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.hi.png b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.hi.png new file mode 100644 index 00000000..e68c1881 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.hi.png differ diff --git a/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.it.png b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.it.png new file mode 100644 index 00000000..e68c1881 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.it.png differ diff --git a/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.hi.png b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.hi.png new file mode 100644 index 00000000..357708db Binary files /dev/null and b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.hi.png differ diff --git a/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.it.png b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.it.png new file mode 100644 index 00000000..357708db Binary files /dev/null and b/translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.it.png differ diff --git a/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.hi.png b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.hi.png new file mode 100644 index 00000000..ff2cb168 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.hi.png differ diff --git a/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.it.png b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.it.png new file mode 100644 index 00000000..ff2cb168 Binary files /dev/null and b/translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.it.png differ diff --git a/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.hi.png b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.hi.png new file mode 100644 index 00000000..4dd28830 Binary files /dev/null and b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.hi.png differ diff --git a/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.it.png b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.it.png new file mode 100644 index 00000000..4dd28830 Binary files /dev/null and b/translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.it.png differ diff --git a/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.hi.png b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.hi.png new file mode 100644 index 00000000..36a0bed7 Binary files /dev/null and b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.hi.png differ diff --git a/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.it.png b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.it.png new file mode 100644 index 00000000..36a0bed7 Binary files /dev/null and b/translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.it.png differ diff --git a/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.hi.png b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.hi.png new file mode 100644 index 00000000..43b82415 Binary files /dev/null and b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.hi.png differ diff --git a/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.it.png b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.it.png new file mode 100644 index 00000000..43b82415 Binary files /dev/null and b/translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.it.png differ diff --git a/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.hi.png b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.hi.png new file mode 100644 index 00000000..9f42e92d Binary files /dev/null and b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.hi.png differ diff --git a/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.it.png b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.it.png new file mode 100644 index 00000000..9f42e92d Binary files /dev/null and b/translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.it.png differ diff --git a/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.hi.png b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.hi.png new file mode 100644 index 00000000..91118b35 Binary files /dev/null and b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.hi.png differ diff --git a/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.it.png b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.it.png new file mode 100644 index 00000000..91118b35 Binary files /dev/null and b/translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.it.png differ diff --git a/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.hi.png b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.hi.png new file mode 100644 index 00000000..c1074a8e Binary files /dev/null and b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.hi.png differ diff --git a/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.it.png b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.it.png new file mode 100644 index 00000000..c1074a8e Binary files /dev/null and b/translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.it.png differ diff --git a/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.hi.png b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.hi.png new file mode 100644 index 00000000..a4cca4dc Binary files /dev/null and b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.hi.png differ diff --git a/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.it.png b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.it.png new file mode 100644 index 00000000..a4cca4dc Binary files /dev/null and b/translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.it.png differ diff --git a/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.hi.png b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.hi.png new file mode 100644 index 00000000..1dd02459 Binary files /dev/null and b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.hi.png differ diff --git a/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.it.png b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.it.png new file mode 100644 index 00000000..1dd02459 Binary files /dev/null and b/translated_images/custom-vision-banana-prediction.30cdff4e1d72db5d9a0be0193790a47c2b387da034e12dc1314dd57ca2131b59.it.png differ diff --git a/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.hi.png b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.hi.png new file mode 100644 index 00000000..64ba974b Binary files /dev/null and b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.hi.png differ diff --git a/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.it.png b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.it.png new file mode 100644 index 00000000..64ba974b Binary files /dev/null and b/translated_images/custom-vision-create-object-detector-project.32d4fb9aa8e7e7375f8a799bfce517aca970f2cb65e42d4245c5e635c734ab29.it.png differ diff --git a/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.hi.png b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.hi.png new file mode 100644 index 00000000..fd3d1f9b Binary files /dev/null and b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.hi.png differ diff --git a/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.it.png b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.it.png new file mode 100644 index 00000000..fd3d1f9b Binary files /dev/null and b/translated_images/custom-vision-create-project.cf46325b92d8b131089f6647cf5e07b664cb77850e106d66e3c057b6b69756c6.it.png differ diff --git a/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.hi.png b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.hi.png new file mode 100644 index 00000000..f523159b Binary files /dev/null and b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.hi.png differ diff --git a/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.it.png b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.it.png new file mode 100644 index 00000000..f523159b Binary files /dev/null and b/translated_images/custom-vision-logo.d3d4e7c8a87ec9daf825e72e210576c3cbf60312577be7a139e22dd97ab7f1e6.it.png differ diff --git a/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.hi.png b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.hi.png new file mode 100644 index 00000000..70a9bacf Binary files /dev/null and b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.hi.png differ diff --git a/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.it.png b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.it.png new file mode 100644 index 00000000..70a9bacf Binary files /dev/null and b/translated_images/custom-vision-object-detector-publish-button.34ee379fc650ccb9856c3868d0003f413b9529f102fc73c37168c98d721cc293.it.png differ diff --git a/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.hi.png b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.hi.png new file mode 100644 index 00000000..9e30ab1c Binary files /dev/null and b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.hi.png differ diff --git a/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.it.png b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.it.png new file mode 100644 index 00000000..9e30ab1c Binary files /dev/null and b/translated_images/custom-vision-prediction-key-endpoint.30c569ffd0338864f319911f052d5e9b8c5066cb0800a26dd6f7ff5713130ad8.it.png differ diff --git a/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.hi.png b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.hi.png new file mode 100644 index 00000000..e9f61adc Binary files /dev/null and b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.hi.png differ diff --git a/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.it.png b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.it.png new file mode 100644 index 00000000..e9f61adc Binary files /dev/null and b/translated_images/custom-vision-publish-button.b7174e1977b0c33b8b72d4e5b1326c779e0af196f3849d09985ee2d7d5493a39.it.png differ diff --git a/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.hi.png b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.hi.png new file mode 100644 index 00000000..a54521f7 Binary files /dev/null and b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.hi.png differ diff --git a/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.it.png b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.it.png new file mode 100644 index 00000000..a54521f7 Binary files /dev/null and b/translated_images/custom-vision-stock-prediction.942266ab1bcca3410ecdf23643b9f5f570cfab2345235074e24c51f285777613.it.png differ diff --git a/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.hi.png b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.hi.png new file mode 100644 index 00000000..6981df8a Binary files /dev/null and b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.hi.png differ diff --git a/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.it.png b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.it.png new file mode 100644 index 00000000..6981df8a Binary files /dev/null and b/translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.it.png differ diff --git a/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.hi.png b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.hi.png new file mode 100644 index 00000000..2722c065 Binary files /dev/null and b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.hi.png differ diff --git a/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.it.png b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.it.png new file mode 100644 index 00000000..2722c065 Binary files /dev/null and b/translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.it.png differ diff --git a/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.hi.jpg b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.hi.jpg new file mode 100644 index 00000000..cce2a759 Binary files /dev/null and b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.hi.jpg differ diff --git a/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.it.jpg b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.it.jpg new file mode 100644 index 00000000..cce2a759 Binary files /dev/null and b/translated_images/dynamic-mic.8babac890a2d80dfb0874b5bf37d4b851fe2aeb9da6fd72945746176978bf3bb.it.jpg differ diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.hi.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.hi.png new file mode 100644 index 00000000..26e0ae43 Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.hi.png differ diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.it.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.it.png new file mode 100644 index 00000000..26e0ae43 Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.it.png differ diff --git a/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.hi.png b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.hi.png new file mode 100644 index 00000000..a5d549fd Binary files /dev/null and b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.hi.png differ diff --git a/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.it.png b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.it.png new file mode 100644 index 00000000..a5d549fd Binary files /dev/null and b/translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.it.png differ diff --git a/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.hi.png b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.hi.png new file mode 100644 index 00000000..a251745c Binary files /dev/null and b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.hi.png differ diff --git a/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.it.png b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.it.png new file mode 100644 index 00000000..a251745c Binary files /dev/null and b/translated_images/fruit-quality-detector-message-flow.adf2a65da8fd8741ac7af11361574de89adc126785d67606bb4d2ec00467e380.it.png differ diff --git a/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.hi.png b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.hi.png new file mode 100644 index 00000000..bb97d28e Binary files /dev/null and b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.hi.png differ diff --git a/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.it.png b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.it.png new file mode 100644 index 00000000..bb97d28e Binary files /dev/null and b/translated_images/gdd-calculation-corn.64a58b7a7afcd0dfd46ff733996d939f17f4f3feac9f0d1c632be3523e51ebd9.it.png differ diff --git a/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.hi.png b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.hi.png new file mode 100644 index 00000000..e34dea22 Binary files /dev/null and b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.hi.png differ diff --git a/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.it.png b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.it.png new file mode 100644 index 00000000..e34dea22 Binary files /dev/null and b/translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.it.png differ diff --git a/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.hi.png b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.hi.png new file mode 100644 index 00000000..fa863501 Binary files /dev/null and b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.hi.png differ diff --git a/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.it.png b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.it.png new file mode 100644 index 00000000..fa863501 Binary files /dev/null and b/translated_images/gdd-calculation.79b3660f9c5757aa92dc2dd2cdde75344e2d2c1565c4b3151640f7887edc0275.it.png differ diff --git a/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.hi.png b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.hi.png new file mode 100644 index 00000000..0d0e0c48 Binary files /dev/null and b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.hi.png differ diff --git a/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.it.png b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.it.png new file mode 100644 index 00000000..0d0e0c48 Binary files /dev/null and b/translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.it.png differ diff --git a/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.hi.png b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.hi.png new file mode 100644 index 00000000..6f79a498 Binary files /dev/null and b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.hi.png differ diff --git a/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.it.png b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.it.png new file mode 100644 index 00000000..6f79a498 Binary files /dev/null and b/translated_images/geofence-crossing-inaccurate-gps.6a3ed911202ad9cabb66d3964888cec03a42c61d5b8f536ad5bdc99716b370f5.it.png differ diff --git a/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.hi.png b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.hi.png new file mode 100644 index 00000000..8527d4cd Binary files /dev/null and b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.hi.png differ diff --git a/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.it.png b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.it.png new file mode 100644 index 00000000..8527d4cd Binary files /dev/null and b/translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.it.png differ diff --git a/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.hi.png b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.hi.png new file mode 100644 index 00000000..8597bf4d Binary files /dev/null and b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.hi.png differ diff --git a/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.it.png b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.it.png new file mode 100644 index 00000000..8597bf4d Binary files /dev/null and b/translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.it.png differ diff --git a/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.hi.png b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.hi.png new file mode 100644 index 00000000..3bf24358 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.hi.png differ diff --git a/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.it.png b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.it.png new file mode 100644 index 00000000..3bf24358 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.it.png differ diff --git a/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.hi.png b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.hi.png new file mode 100644 index 00000000..562f66d2 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.hi.png differ diff --git a/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.it.png b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.it.png new file mode 100644 index 00000000..562f66d2 Binary files /dev/null and b/translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.it.png differ diff --git a/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.hi.png b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.hi.png new file mode 100644 index 00000000..2f50d53a Binary files /dev/null and b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.hi.png differ diff --git a/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.it.png b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.it.png new file mode 100644 index 00000000..2f50d53a Binary files /dev/null and b/translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.it.png differ diff --git a/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.hi.png b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.hi.png new file mode 100644 index 00000000..de7f343e Binary files /dev/null and b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.hi.png differ diff --git a/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.it.png b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.it.png new file mode 100644 index 00000000..de7f343e Binary files /dev/null and b/translated_images/grove-button.a70cfbb809a8563681003250cf5b06d68cdcc68624f9e2f493d5a534ae2da1e5.it.png differ diff --git a/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.hi.png b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.hi.png new file mode 100644 index 00000000..c8b1a544 Binary files /dev/null and b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.hi.png differ diff --git a/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.it.png b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.it.png new file mode 100644 index 00000000..c8b1a544 Binary files /dev/null and b/translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.it.png differ diff --git a/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.hi.png b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.hi.png new file mode 100644 index 00000000..17d1151d Binary files /dev/null and b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.hi.png differ diff --git a/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.it.png b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.it.png new file mode 100644 index 00000000..17d1151d Binary files /dev/null and b/translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.it.png differ diff --git a/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.hi.png b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.hi.png new file mode 100644 index 00000000..ffafc104 Binary files /dev/null and b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.hi.png differ diff --git a/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.it.png b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.it.png new file mode 100644 index 00000000..ffafc104 Binary files /dev/null and b/translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.it.png differ diff --git a/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.hi.png b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.hi.png new file mode 100644 index 00000000..e3d86f8c Binary files /dev/null and b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.hi.png differ diff --git a/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.it.png b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.it.png new file mode 100644 index 00000000..e3d86f8c Binary files /dev/null and b/translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.it.png differ diff --git a/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.hi.png b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.hi.png new file mode 100644 index 00000000..3a4445ee Binary files /dev/null and b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.hi.png differ diff --git a/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.it.png b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.it.png new file mode 100644 index 00000000..3a4445ee Binary files /dev/null and b/translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.it.png differ diff --git a/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.hi.png b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.hi.png new file mode 100644 index 00000000..b2bf4d3f Binary files /dev/null and b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.hi.png differ diff --git a/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.it.png b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.it.png new file mode 100644 index 00000000..b2bf4d3f Binary files /dev/null and b/translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.it.png differ diff --git a/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.hi.png b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.hi.png new file mode 100644 index 00000000..467cedcd Binary files /dev/null and b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.hi.png differ diff --git a/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.it.png b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.it.png new file mode 100644 index 00000000..467cedcd Binary files /dev/null and b/translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.it.png differ diff --git a/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.hi.png b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.hi.png new file mode 100644 index 00000000..88efaa59 Binary files /dev/null and b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.hi.png differ diff --git a/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.it.png b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.it.png new file mode 100644 index 00000000..88efaa59 Binary files /dev/null and b/translated_images/grove-time-of-flight-sensor.d82ff2165bfded9f485de54d8d07195a6270a602696825fca19f629ddfe94e86.it.png differ diff --git a/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.hi.png b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.hi.png new file mode 100644 index 00000000..6197ed95 Binary files /dev/null and b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.hi.png differ diff --git a/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.it.png b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.it.png new file mode 100644 index 00000000..6197ed95 Binary files /dev/null and b/translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.it.png differ diff --git a/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.hi.png b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.hi.png new file mode 100644 index 00000000..ec7768da Binary files /dev/null and b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.hi.png differ diff --git a/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.it.png b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.it.png new file mode 100644 index 00000000..ec7768da Binary files /dev/null and b/translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.it.png differ diff --git a/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.hi.png b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.hi.png new file mode 100644 index 00000000..f68bf461 Binary files /dev/null and b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.hi.png differ diff --git a/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.it.png b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.it.png new file mode 100644 index 00000000..f68bf461 Binary files /dev/null and b/translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.it.png differ diff --git a/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.hi.png b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.hi.png new file mode 100644 index 00000000..73e34cfe Binary files /dev/null and b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.hi.png differ diff --git a/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.it.png b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.it.png new file mode 100644 index 00000000..73e34cfe Binary files /dev/null and b/translated_images/image-classifier-cashews-tomato.bc2e16ab8f05cf9ac0f59f73e32efc4227f9a5b601b90b2c60f436694547a965.it.png differ diff --git a/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.hi.png b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.hi.png new file mode 100644 index 00000000..21cc6bd0 Binary files /dev/null and b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.hi.png differ diff --git a/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.it.png b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.it.png new file mode 100644 index 00000000..21cc6bd0 Binary files /dev/null and b/translated_images/image-upload-bananas.0751639f3815e0ec42bdbc6254d1e4357a185834d1ae10c9948a0e7d6d336695.it.png differ diff --git a/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.hi.png b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.hi.png new file mode 100644 index 00000000..9c7deb23 Binary files /dev/null and b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.hi.png differ diff --git a/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.it.png b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.it.png new file mode 100644 index 00000000..9c7deb23 Binary files /dev/null and b/translated_images/image-upload-object-detector.77c7892c3093cb59b79018edecd678749a75d71a099bc8a2d2f2f76320f88a5b.it.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.hi.png b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.hi.png new file mode 100644 index 00000000..ddc9958b Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.hi.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.it.png b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.it.png new file mode 100644 index 00000000..ddc9958b Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.it.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.hi.png b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.hi.png new file mode 100644 index 00000000..d181210a Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.hi.png differ diff --git a/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.it.png b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.it.png new file mode 100644 index 00000000..d181210a Binary files /dev/null and b/translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.it.png differ diff --git a/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.hi.png b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.hi.png new file mode 100644 index 00000000..a00ab427 Binary files /dev/null and b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.hi.png differ diff --git a/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.it.png b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.it.png new file mode 100644 index 00000000..a00ab427 Binary files /dev/null and b/translated_images/iot-for-beginners.95958e2ed1900917f0c2173dd725ae0a2c1af97b9a26e56c76d3c8c8925f32ee.it.png differ diff --git a/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.hi.png b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.hi.png new file mode 100644 index 00000000..dedb38a3 Binary files /dev/null and b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.hi.png differ diff --git a/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.it.png b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.it.png new file mode 100644 index 00000000..dedb38a3 Binary files /dev/null and b/translated_images/iot-hub-cloud-to-device-message.f4f21fea772cc20ba15004d853b805f6c01b612d257df6295ed7618550308aaf.it.png differ diff --git a/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.hi.png b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.hi.png new file mode 100644 index 00000000..2b34487d Binary files /dev/null and b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.hi.png differ diff --git a/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.it.png b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.it.png new file mode 100644 index 00000000..2b34487d Binary files /dev/null and b/translated_images/iot-hub-device-to-cloud-message.e46e584d87f35fd952657f0b566dcac59473fe960d87c96fa54a4b5438ddc31f.it.png differ diff --git a/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.hi.png b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.hi.png new file mode 100644 index 00000000..1cae68ed Binary files /dev/null and b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.hi.png differ diff --git a/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.it.png b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.it.png new file mode 100644 index 00000000..1cae68ed Binary files /dev/null and b/translated_images/iot-hub-device-twins.7055a60fc5e2331c44298ae157d72edec0022910b1a4bf4bc93f39c620878b68.it.png differ diff --git a/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.hi.png b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.hi.png new file mode 100644 index 00000000..df961cae Binary files /dev/null and b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.hi.png differ diff --git a/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.it.png b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.it.png new file mode 100644 index 00000000..df961cae Binary files /dev/null and b/translated_images/iot-hub-direct-method-request.86a5026e91f4ca1864e2043fab4b8199e42c2c6efc1209973cb56f199646b171.it.png differ diff --git a/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.hi.png b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.hi.png new file mode 100644 index 00000000..aaeaeff8 Binary files /dev/null and b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.hi.png differ diff --git a/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.it.png b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.it.png new file mode 100644 index 00000000..aaeaeff8 Binary files /dev/null and b/translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.it.png differ diff --git a/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.hi.png b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.hi.png new file mode 100644 index 00000000..7613fe86 Binary files /dev/null and b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.hi.png differ diff --git a/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.it.png b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.it.png new file mode 100644 index 00000000..7613fe86 Binary files /dev/null and b/translated_images/iot-reference-architecture-azure.0b8d2161af924cb18ae48a8558a19541cca47f27264851b5b7e56d7b8bb372ac.it.png differ diff --git a/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.hi.png b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.hi.png new file mode 100644 index 00000000..335bdf32 Binary files /dev/null and b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.hi.png differ diff --git a/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.it.png b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.it.png new file mode 100644 index 00000000..335bdf32 Binary files /dev/null and b/translated_images/iot-reference-architecture-fruit-quality.cc705f121c3b6fa71c800d9630935ac34bc08223a04601e35f41d5e9b5dd5207.it.png differ diff --git a/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.hi.png b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.hi.png new file mode 100644 index 00000000..32c8ba10 Binary files /dev/null and b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.hi.png differ diff --git a/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.it.png b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.it.png new file mode 100644 index 00000000..32c8ba10 Binary files /dev/null and b/translated_images/iot-reference-architecture.2278b98b55c6d4e89bde18eada3688d893861d43507641804dd2f9d3079cfaa0.it.png differ diff --git a/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.hi.png b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.hi.png new file mode 100644 index 00000000..82802e17 Binary files /dev/null and b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.hi.png differ diff --git a/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.it.png b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.it.png new file mode 100644 index 00000000..82802e17 Binary files /dev/null and b/translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.it.png differ diff --git a/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.hi.png b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.hi.png new file mode 100644 index 00000000..8214fc2c Binary files /dev/null and b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.hi.png differ diff --git a/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.it.png b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.it.png new file mode 100644 index 00000000..8214fc2c Binary files /dev/null and b/translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.it.png differ diff --git a/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.hi.png b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.hi.png new file mode 100644 index 00000000..434baaad Binary files /dev/null and b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.hi.png differ diff --git a/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.it.png b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.it.png new file mode 100644 index 00000000..434baaad Binary files /dev/null and b/translated_images/latitude-equator.feccc3214b7d9fb1e1b2e44f938081c85149f092152de1509783b344e5f2097a.it.png differ diff --git a/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.hi.png b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.hi.png new file mode 100644 index 00000000..d32271b5 Binary files /dev/null and b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.hi.png differ diff --git a/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.it.png b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.it.png new file mode 100644 index 00000000..d32271b5 Binary files /dev/null and b/translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.it.png differ diff --git a/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.hi.png b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.hi.png new file mode 100644 index 00000000..04cd7dc8 Binary files /dev/null and b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.hi.png differ diff --git a/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.it.png b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.it.png new file mode 100644 index 00000000..04cd7dc8 Binary files /dev/null and b/translated_images/led-digital-control.13b9be14077ea49f883c2ec52e1ce1c587804f2ed653f4061661e6a8783dd8c7.it.png differ diff --git a/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.hi.png b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.hi.png new file mode 100644 index 00000000..a8a12bce Binary files /dev/null and b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.hi.png differ diff --git a/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.it.png b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.it.png new file mode 100644 index 00000000..a8a12bce Binary files /dev/null and b/translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.it.png differ diff --git a/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.hi.jpg b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.hi.jpg new file mode 100644 index 00000000..23ea98b2 Binary files /dev/null and b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.hi.jpg differ diff --git a/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.it.jpg b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.it.jpg new file mode 100644 index 00000000..23ea98b2 Binary files /dev/null and b/translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.it.jpg differ diff --git a/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.hi.jpg b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.hi.jpg new file mode 100644 index 00000000..1e3581d3 Binary files /dev/null and b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.hi.jpg differ diff --git a/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.it.jpg b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.it.jpg new file mode 100644 index 00000000..1e3581d3 Binary files /dev/null and b/translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.it.jpg differ diff --git a/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.hi.jpg b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.hi.jpg new file mode 100644 index 00000000..554ea37b Binary files /dev/null and b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.hi.jpg differ diff --git a/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.it.jpg b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.it.jpg new file mode 100644 index 00000000..554ea37b Binary files /dev/null and b/translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.it.jpg differ diff --git a/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.hi.jpg b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.hi.jpg new file mode 100644 index 00000000..427ba4c3 Binary files /dev/null and b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.hi.jpg differ diff --git a/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.it.jpg b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.it.jpg new file mode 100644 index 00000000..427ba4c3 Binary files /dev/null and b/translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.it.jpg differ diff --git a/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.hi.jpg b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.hi.jpg new file mode 100644 index 00000000..b2357285 Binary files /dev/null and b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.hi.jpg differ diff --git a/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.it.jpg b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.it.jpg new file mode 100644 index 00000000..b2357285 Binary files /dev/null and b/translated_images/lesson-13.a259db1485021be7d7c72e90842fbe0ab977529e8684c179b5fb1ea75e92b3ef.it.jpg differ diff --git a/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.hi.jpg b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.hi.jpg new file mode 100644 index 00000000..1736ebb4 Binary files /dev/null and b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.hi.jpg differ diff --git a/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.it.jpg b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.it.jpg new file mode 100644 index 00000000..1736ebb4 Binary files /dev/null and b/translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.it.jpg differ diff --git a/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.hi.jpg b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.hi.jpg new file mode 100644 index 00000000..bf1d724f Binary files /dev/null and b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.hi.jpg differ diff --git a/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.it.jpg b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.it.jpg new file mode 100644 index 00000000..bf1d724f Binary files /dev/null and b/translated_images/lesson-15.843d21afdc6fb2bba70cd9db7b7d2f91598859fafda2078b0bdc44954194b6c0.it.jpg differ diff --git a/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.hi.jpg b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.hi.jpg new file mode 100644 index 00000000..bb78259a Binary files /dev/null and b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.hi.jpg differ diff --git a/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.it.jpg b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.it.jpg new file mode 100644 index 00000000..bb78259a Binary files /dev/null and b/translated_images/lesson-16.215daf18b00631fbdfd64c6fc2dc6044dff5d544288825d8076f9fb83d964c23.it.jpg differ diff --git a/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.hi.jpg b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.hi.jpg new file mode 100644 index 00000000..b311b568 Binary files /dev/null and b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.hi.jpg differ diff --git a/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.it.jpg b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.it.jpg new file mode 100644 index 00000000..b311b568 Binary files /dev/null and b/translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.it.jpg differ diff --git a/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.hi.jpg b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.hi.jpg new file mode 100644 index 00000000..5bd350fd Binary files /dev/null and b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.hi.jpg differ diff --git a/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.it.jpg b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.it.jpg new file mode 100644 index 00000000..5bd350fd Binary files /dev/null and b/translated_images/lesson-18.92c32ed1d354caa5a54baa4032cf0b172d4655e8e326ad5d46c558a0def15365.it.jpg differ diff --git a/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.hi.jpg b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.hi.jpg new file mode 100644 index 00000000..66fbe114 Binary files /dev/null and b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.hi.jpg differ diff --git a/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.it.jpg b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.it.jpg new file mode 100644 index 00000000..66fbe114 Binary files /dev/null and b/translated_images/lesson-19.cf6973cecadf080c4b526310620dc4d6f5994c80fb0139c6f378cc9ca2d435cd.it.jpg differ diff --git a/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.hi.jpg b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.hi.jpg new file mode 100644 index 00000000..050e7206 Binary files /dev/null and b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.hi.jpg differ diff --git a/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.it.jpg b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.it.jpg new file mode 100644 index 00000000..050e7206 Binary files /dev/null and b/translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.it.jpg differ diff --git a/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.hi.jpg b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.hi.jpg new file mode 100644 index 00000000..91c64faa Binary files /dev/null and b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.hi.jpg differ diff --git a/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.it.jpg b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.it.jpg new file mode 100644 index 00000000..91c64faa Binary files /dev/null and b/translated_images/lesson-20.0211df9551a8abb300fc8fcf7dc2789468dea2eabe9202273ac077b0ba37f15e.it.jpg differ diff --git a/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.hi.jpg b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.hi.jpg new file mode 100644 index 00000000..36e1a4b3 Binary files /dev/null and b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.hi.jpg differ diff --git a/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.it.jpg b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.it.jpg new file mode 100644 index 00000000..36e1a4b3 Binary files /dev/null and b/translated_images/lesson-21.e34de51354d6606fb5ee08d8c89d0222eea0a2a7aaf744a8805ae847c4f69dc4.it.jpg differ diff --git a/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.hi.jpg b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.hi.jpg new file mode 100644 index 00000000..1b87df4c Binary files /dev/null and b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.hi.jpg differ diff --git a/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.it.jpg b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.it.jpg new file mode 100644 index 00000000..1b87df4c Binary files /dev/null and b/translated_images/lesson-22.6148ea28500d9e00c396aaa2649935fb6641362c8f03d8e5e90a676977ab01dd.it.jpg differ diff --git a/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.hi.jpg b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.hi.jpg new file mode 100644 index 00000000..8df37a22 Binary files /dev/null and b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.hi.jpg differ diff --git a/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.it.jpg b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.it.jpg new file mode 100644 index 00000000..8df37a22 Binary files /dev/null and b/translated_images/lesson-23.f38483e1d4df4828990d3f02d60e46c978b075d384ae7cb4f7bab738e107c850.it.jpg differ diff --git a/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.hi.jpg b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.hi.jpg new file mode 100644 index 00000000..943af1b9 Binary files /dev/null and b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.hi.jpg differ diff --git a/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.it.jpg b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.it.jpg new file mode 100644 index 00000000..943af1b9 Binary files /dev/null and b/translated_images/lesson-24.4246968ed058510ab275052e87ef9aa89c7b2f938915d103c605c04dc6cd5bb7.it.jpg differ diff --git a/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.hi.jpg b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.hi.jpg new file mode 100644 index 00000000..5a96f7fb Binary files /dev/null and b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.hi.jpg differ diff --git a/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.it.jpg b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.it.jpg new file mode 100644 index 00000000..5a96f7fb Binary files /dev/null and b/translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.it.jpg differ diff --git a/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.hi.jpg b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.hi.jpg new file mode 100644 index 00000000..8f0bee50 Binary files /dev/null and b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.hi.jpg differ diff --git a/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.it.jpg b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.it.jpg new file mode 100644 index 00000000..8f0bee50 Binary files /dev/null and b/translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.it.jpg differ diff --git a/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.hi.jpg b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.hi.jpg new file mode 100644 index 00000000..4ba24109 Binary files /dev/null and b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.hi.jpg differ diff --git a/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.it.jpg b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.it.jpg new file mode 100644 index 00000000..4ba24109 Binary files /dev/null and b/translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.it.jpg differ diff --git a/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.hi.jpg b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.hi.jpg new file mode 100644 index 00000000..cdf0f557 Binary files /dev/null and b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.hi.jpg differ diff --git a/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.it.jpg b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.it.jpg new file mode 100644 index 00000000..cdf0f557 Binary files /dev/null and b/translated_images/lesson-6.3e493b60eee85adc8c74dfeaaec3a3a6cfba61fedbcb84aa0146e7e80603a5dd.it.jpg differ diff --git a/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.hi.jpg b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.hi.jpg new file mode 100644 index 00000000..f59ee98d Binary files /dev/null and b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.hi.jpg differ diff --git a/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.it.jpg b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.it.jpg new file mode 100644 index 00000000..f59ee98d Binary files /dev/null and b/translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.it.jpg differ diff --git a/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.hi.jpg b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.hi.jpg new file mode 100644 index 00000000..5bdbfd14 Binary files /dev/null and b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.hi.jpg differ diff --git a/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.it.jpg b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.it.jpg new file mode 100644 index 00000000..5bdbfd14 Binary files /dev/null and b/translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.it.jpg differ diff --git a/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.hi.jpg b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.hi.jpg new file mode 100644 index 00000000..b78ab3ac Binary files /dev/null and b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.hi.jpg differ diff --git a/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.it.jpg b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.it.jpg new file mode 100644 index 00000000..b78ab3ac Binary files /dev/null and b/translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.it.jpg differ diff --git a/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.hi.png b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.hi.png new file mode 100644 index 00000000..d071dffe Binary files /dev/null and b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.hi.png differ diff --git a/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.it.png b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.it.png new file mode 100644 index 00000000..d071dffe Binary files /dev/null and b/translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.it.png differ diff --git a/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.hi.png b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.hi.png new file mode 100644 index 00000000..b8947f6d Binary files /dev/null and b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.hi.png differ diff --git a/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.it.png b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.it.png new file mode 100644 index 00000000..b8947f6d Binary files /dev/null and b/translated_images/lines-of-longitude-and-latitude.032aca9d3e402c4e89da3f1c269b955f0dac443ae4ae3dd6e1dada5761c39a92.it.png differ diff --git a/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.hi.png b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.hi.png new file mode 100644 index 00000000..5c5dfb96 Binary files /dev/null and b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.hi.png differ diff --git a/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.it.png b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.it.png new file mode 100644 index 00000000..5c5dfb96 Binary files /dev/null and b/translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.it.png differ diff --git a/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.hi.png b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.hi.png new file mode 100644 index 00000000..663ad7e9 Binary files /dev/null and b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.hi.png differ diff --git a/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.it.png b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.it.png new file mode 100644 index 00000000..663ad7e9 Binary files /dev/null and b/translated_images/longitude-prime-meridian.33b01b41ce615f9ddf85d91b0f93bdc076cfa44bb10b17296de42e2d1ba1090e.it.png differ diff --git a/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.hi.png b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.hi.png new file mode 100644 index 00000000..b1e33d6b Binary files /dev/null and b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.hi.png differ diff --git a/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.it.png b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.it.png new file mode 100644 index 00000000..b1e33d6b Binary files /dev/null and b/translated_images/luis-intent-examples.25716580b2d2723cf1bafdf277d015c7f046d8cfa20f27bddf3a0873ec45fab7.it.png differ diff --git a/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.hi.png b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.hi.png new file mode 100644 index 00000000..2a03ab78 Binary files /dev/null and b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.hi.png differ diff --git a/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.it.png b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.it.png new file mode 100644 index 00000000..2a03ab78 Binary files /dev/null and b/translated_images/luis-logo.5cb4f3e88c020ee6df4f614e8831f4a4b6809a7247bf52085fb48d629ef9be52.it.png differ diff --git a/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.hi.png b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.hi.png new file mode 100644 index 00000000..02ef1351 Binary files /dev/null and b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.hi.png differ diff --git a/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.it.png b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.it.png new file mode 100644 index 00000000..02ef1351 Binary files /dev/null and b/translated_images/map-image.8fb2c53eb23ef39c1c0a4410a5282e879b3b452b707eb066ff04c5488d3d72b7.it.png differ diff --git a/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.hi.png b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.hi.png new file mode 100644 index 00000000..33faabd1 Binary files /dev/null and b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.hi.png differ diff --git a/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.it.png b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.it.png new file mode 100644 index 00000000..33faabd1 Binary files /dev/null and b/translated_images/map-path.896832e72dc696ffe20650e4051027d4855442d955f93fdbb80bb417ca8a406f.it.png differ diff --git a/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.hi.png b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.hi.png new file mode 100644 index 00000000..aa94da2c Binary files /dev/null and b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.hi.png differ diff --git a/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.it.png b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.it.png new file mode 100644 index 00000000..aa94da2c Binary files /dev/null and b/translated_images/mems-microphone.80574019e1f5e4d9ee72fed720ecd25a39fc2969c91355d17ebb24ba4159e4c4.it.png differ diff --git a/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.hi.png b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.hi.png new file mode 100644 index 00000000..ac000818 Binary files /dev/null and b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.hi.png differ diff --git a/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.it.png b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.it.png new file mode 100644 index 00000000..ac000818 Binary files /dev/null and b/translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.it.png differ diff --git a/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.hi.png b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.hi.png new file mode 100644 index 00000000..2fb519f5 Binary files /dev/null and b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.hi.png differ diff --git a/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.it.png b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.it.png new file mode 100644 index 00000000..2fb519f5 Binary files /dev/null and b/translated_images/microsoft-gps-location.9eb77a13b22b7e70a0a80bd2b54c24eda141b4ee15a0373c93f8c73f4fcd81f5.it.png differ diff --git a/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.hi.png b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.hi.png new file mode 100644 index 00000000..48459b92 Binary files /dev/null and b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.hi.png differ diff --git a/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.it.png b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.it.png new file mode 100644 index 00000000..48459b92 Binary files /dev/null and b/translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.it.png differ diff --git a/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.hi.png b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.hi.png new file mode 100644 index 00000000..d502a579 Binary files /dev/null and b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.hi.png differ diff --git a/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.it.png b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.it.png new file mode 100644 index 00000000..d502a579 Binary files /dev/null and b/translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.it.png differ diff --git a/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.hi.png b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.hi.png new file mode 100644 index 00000000..fca45002 Binary files /dev/null and b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.hi.png differ diff --git a/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.it.png b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.it.png new file mode 100644 index 00000000..fca45002 Binary files /dev/null and b/translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.it.png differ diff --git a/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.hi.png b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.hi.png new file mode 100644 index 00000000..94aa28db Binary files /dev/null and b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.hi.png differ diff --git a/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.it.png b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.it.png new file mode 100644 index 00000000..94aa28db Binary files /dev/null and b/translated_images/object-detector-cashews-tomato.1af7c26686b4db0e709754aeb196f4e73271f54e2085db3bcccb70d4a0d84d97.it.png differ diff --git a/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.hi.png b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.hi.png new file mode 100644 index 00000000..894df473 Binary files /dev/null and b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.hi.png differ diff --git a/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.it.png b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.it.png new file mode 100644 index 00000000..894df473 Binary files /dev/null and b/translated_images/object-detector-detected-tomato-paste.52656fe87af4c37b4ee540526d63e73ed075da2e54a9a060aa528e0c562fb1b6.it.png differ diff --git a/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.hi.png b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.hi.png new file mode 100644 index 00000000..b75dfdd2 Binary files /dev/null and b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.hi.png differ diff --git a/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.it.png b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.it.png new file mode 100644 index 00000000..b75dfdd2 Binary files /dev/null and b/translated_images/object-detector-tag-tomato-paste.f47c362fb0f0eb582f3bc68cf3855fb43a805106395358d41896a269c210b7b4.it.png differ diff --git a/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.hi.png b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.hi.png new file mode 100644 index 00000000..1e7934c3 Binary files /dev/null and b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.hi.png differ diff --git a/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.it.png b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.it.png new file mode 100644 index 00000000..1e7934c3 Binary files /dev/null and b/translated_images/optical-tomato-sorting.61aa134bdda4e5b1bfb16a212c1e35a6ef0c426cbb8b1c975f79d7bfbf48d068.it.png differ diff --git a/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.hi.png b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.hi.png new file mode 100644 index 00000000..5bb319ec Binary files /dev/null and b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.hi.png differ diff --git a/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.it.png b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.it.png new file mode 100644 index 00000000..5bb319ec Binary files /dev/null and b/translated_images/overlap-object-detection.d431e03cae75072a2760430eca7f2c5fdd43045bfd72dadcbf12711f7cd6c2ae.it.png differ diff --git a/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.hi.png b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.hi.png new file mode 100644 index 00000000..d66e224f Binary files /dev/null and b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.hi.png differ diff --git a/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.it.png b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.it.png new file mode 100644 index 00000000..d66e224f Binary files /dev/null and b/translated_images/pi-button.c7a1a4f55943341ce1baf1057658e9a205804d4131d258e820c93f951df0abf3.it.png differ diff --git a/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.hi.png b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.hi.png new file mode 100644 index 00000000..ed18e7b0 Binary files /dev/null and b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.hi.png differ diff --git a/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.it.png b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.it.png new file mode 100644 index 00000000..ed18e7b0 Binary files /dev/null and b/translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.it.png differ diff --git a/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.hi.png b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.hi.png new file mode 100644 index 00000000..9acb21a7 Binary files /dev/null and b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.hi.png differ diff --git a/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.it.png b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.it.png new file mode 100644 index 00000000..9acb21a7 Binary files /dev/null and b/translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.it.png differ diff --git a/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.hi.png b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.hi.png new file mode 100644 index 00000000..1ced5fc1 Binary files /dev/null and b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.hi.png differ diff --git a/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.it.png b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.it.png new file mode 100644 index 00000000..1ced5fc1 Binary files /dev/null and b/translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.it.png differ diff --git a/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.hi.png b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.hi.png new file mode 100644 index 00000000..7293ced1 Binary files /dev/null and b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.hi.png differ diff --git a/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.it.png b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.it.png new file mode 100644 index 00000000..7293ced1 Binary files /dev/null and b/translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.it.png differ diff --git a/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.hi.png b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.hi.png new file mode 100644 index 00000000..be837c63 Binary files /dev/null and b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.hi.png differ diff --git a/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.it.png b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.it.png new file mode 100644 index 00000000..be837c63 Binary files /dev/null and b/translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.it.png differ diff --git a/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.hi.png b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.hi.png new file mode 100644 index 00000000..73861107 Binary files /dev/null and b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.hi.png differ diff --git a/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.it.png b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.it.png new file mode 100644 index 00000000..73861107 Binary files /dev/null and b/translated_images/pi-hardware-kit.26dbadaedb7dd44c73b0131d5d68ea29472ed0a9744f90d5866c6d82f2d16380.it.png differ diff --git a/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.hi.png b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.hi.png new file mode 100644 index 00000000..1b26d7ff Binary files /dev/null and b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.hi.png differ diff --git a/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.it.png b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.it.png new file mode 100644 index 00000000..1b26d7ff Binary files /dev/null and b/translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.it.png differ diff --git a/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.hi.png b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.hi.png new file mode 100644 index 00000000..f1905ecc Binary files /dev/null and b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.hi.png differ diff --git a/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.it.png b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.it.png new file mode 100644 index 00000000..f1905ecc Binary files /dev/null and b/translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.it.png differ diff --git a/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.hi.png b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.hi.png new file mode 100644 index 00000000..edc44fa9 Binary files /dev/null and b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.hi.png differ diff --git a/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.it.png b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.it.png new file mode 100644 index 00000000..edc44fa9 Binary files /dev/null and b/translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.it.png differ diff --git a/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.hi.png b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.hi.png new file mode 100644 index 00000000..87854d3a Binary files /dev/null and b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.hi.png differ diff --git a/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.it.png b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.it.png new file mode 100644 index 00000000..87854d3a Binary files /dev/null and b/translated_images/pi-respeaker-hat.f00fabe7dd039a93e2e0aa0fc946c9af0c6a9eb17c32fa1ca097fb4e384f69f0.it.png differ diff --git a/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.hi.png b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.hi.png new file mode 100644 index 00000000..d1158e0d Binary files /dev/null and b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.hi.png differ diff --git a/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.it.png b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.it.png new file mode 100644 index 00000000..d1158e0d Binary files /dev/null and b/translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.it.png differ diff --git a/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.hi.png b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.hi.png new file mode 100644 index 00000000..122abea4 Binary files /dev/null and b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.hi.png differ diff --git a/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.it.png b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.it.png new file mode 100644 index 00000000..122abea4 Binary files /dev/null and b/translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.it.png differ diff --git a/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.hi.png b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.hi.png new file mode 100644 index 00000000..dc009aa5 Binary files /dev/null and b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.hi.png differ diff --git a/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.it.png b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.it.png new file mode 100644 index 00000000..dc009aa5 Binary files /dev/null and b/translated_images/pi-time-of-flight-sensor.58c8dc04eb3bfb57a7c3019f031433ef4d798d4d7603d565afbf6f3802840dba.it.png differ diff --git a/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.hi.png b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.hi.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.hi.png differ diff --git a/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.it.png b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.it.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph copy.65baa28afd9b7f5fbc04bf7c9684b086c466a467631568c23549d54949fc71d2.it.png differ diff --git a/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.hi.png b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.hi.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.hi.png differ diff --git a/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.it.png b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.it.png new file mode 100644 index 00000000..ccb0d4e1 Binary files /dev/null and b/translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.it.png differ diff --git a/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.hi.png b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.hi.png new file mode 100644 index 00000000..12274b8b Binary files /dev/null and b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.hi.png differ diff --git a/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.it.png b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.it.png new file mode 100644 index 00000000..12274b8b Binary files /dev/null and b/translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.it.png differ diff --git a/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.hi.png b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.hi.png new file mode 100644 index 00000000..da226797 Binary files /dev/null and b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.hi.png differ diff --git a/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.it.png b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.it.png new file mode 100644 index 00000000..da226797 Binary files /dev/null and b/translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.it.png differ diff --git a/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.hi.png b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.hi.png new file mode 100644 index 00000000..67bd8a82 Binary files /dev/null and b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.hi.png differ diff --git a/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.it.png b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.it.png new file mode 100644 index 00000000..67bd8a82 Binary files /dev/null and b/translated_images/proximity-sensor.f5cd752c77fb62fea000156233b32fd24fad3707ec69b8bdd8d312b7af85156d.it.png differ diff --git a/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.hi.png b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.hi.png new file mode 100644 index 00000000..18938f59 Binary files /dev/null and b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.hi.png differ diff --git a/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.it.png b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.it.png new file mode 100644 index 00000000..18938f59 Binary files /dev/null and b/translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.it.png differ diff --git a/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.hi.png b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.hi.png new file mode 100644 index 00000000..db480604 Binary files /dev/null and b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.hi.png differ diff --git a/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.it.png b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.it.png new file mode 100644 index 00000000..db480604 Binary files /dev/null and b/translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.it.png differ diff --git a/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.hi.png b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.hi.png new file mode 100644 index 00000000..535e5798 Binary files /dev/null and b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.hi.png differ diff --git a/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.it.png b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.it.png new file mode 100644 index 00000000..535e5798 Binary files /dev/null and b/translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.it.png differ diff --git a/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.hi.png b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.hi.png new file mode 100644 index 00000000..b3d83ab7 Binary files /dev/null and b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.hi.png differ diff --git a/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.it.png b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.it.png new file mode 100644 index 00000000..b3d83ab7 Binary files /dev/null and b/translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.it.png differ diff --git a/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.hi.png b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.hi.png new file mode 100644 index 00000000..4bb97d60 Binary files /dev/null and b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.hi.png differ diff --git a/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.it.png b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.it.png new file mode 100644 index 00000000..4bb97d60 Binary files /dev/null and b/translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.it.png differ diff --git a/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.hi.jpg b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.hi.jpg new file mode 100644 index 00000000..4cf0d73d Binary files /dev/null and b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.hi.jpg differ diff --git a/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.it.jpg b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.it.jpg new file mode 100644 index 00000000..4cf0d73d Binary files /dev/null and b/translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.it.jpg differ diff --git a/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.hi.png b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.hi.png new file mode 100644 index 00000000..0aace880 Binary files /dev/null and b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.hi.png differ diff --git a/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.it.png b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.it.png new file mode 100644 index 00000000..0aace880 Binary files /dev/null and b/translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.it.png differ diff --git a/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.hi.png b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.hi.png new file mode 100644 index 00000000..b19b1f6b Binary files /dev/null and b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.hi.png differ diff --git a/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.it.png b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.it.png new file mode 100644 index 00000000..b19b1f6b Binary files /dev/null and b/translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.it.png differ diff --git a/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.hi.jpg b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.hi.jpg new file mode 100644 index 00000000..827670ed Binary files /dev/null and b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.hi.jpg differ diff --git a/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.it.jpg b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.it.jpg new file mode 100644 index 00000000..827670ed Binary files /dev/null and b/translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.it.jpg differ diff --git a/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.hi.png b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.hi.png new file mode 100644 index 00000000..435f901a Binary files /dev/null and b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.hi.png differ diff --git a/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.it.png b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.it.png new file mode 100644 index 00000000..435f901a Binary files /dev/null and b/translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.it.png differ diff --git a/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.hi.png b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.hi.png new file mode 100644 index 00000000..7308a1d1 Binary files /dev/null and b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.hi.png differ diff --git a/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.it.png b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.it.png new file mode 100644 index 00000000..7308a1d1 Binary files /dev/null and b/translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.it.png differ diff --git a/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.hi.png b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.hi.png new file mode 100644 index 00000000..8454c4d2 Binary files /dev/null and b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.hi.png differ diff --git a/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.it.png b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.it.png new file mode 100644 index 00000000..8454c4d2 Binary files /dev/null and b/translated_images/resistive-soil-moisture-sensor.728a138a3d109e0653d8e4f6744140836c67461bbd0f4d887f47ed8228dc80b5.it.png differ diff --git a/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.hi.png b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.hi.png new file mode 100644 index 00000000..324b711d Binary files /dev/null and b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.hi.png differ diff --git a/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.it.png b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.it.png new file mode 100644 index 00000000..324b711d Binary files /dev/null and b/translated_images/respeaker-35mm-speaker.ad79ef4f128c7751f0abf854869b6b779c90c12ae3e48909944a7e48aeee3c7e.it.png differ diff --git a/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.hi.png b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.hi.png new file mode 100644 index 00000000..ddfb42aa Binary files /dev/null and b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.hi.png differ diff --git a/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.it.png b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.it.png new file mode 100644 index 00000000..ddfb42aa Binary files /dev/null and b/translated_images/respeaker-jst-speaker.a441d177809df9458041a2012dd336dbb22c00a5c9642647109d2940a50d6fcc.it.png differ diff --git a/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.hi.png b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.hi.png new file mode 100644 index 00000000..280f2fe0 Binary files /dev/null and b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.hi.png differ diff --git a/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.it.png b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.it.png new file mode 100644 index 00000000..280f2fe0 Binary files /dev/null and b/translated_images/respeaker.f5d19d1c6b14ab1676d24ac2764e64fac5339046ae07be8b45ce07633d61b79b.it.png differ diff --git a/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.hi.jpg b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.hi.jpg new file mode 100644 index 00000000..89b581ef Binary files /dev/null and b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.hi.jpg differ diff --git a/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.it.jpg b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.it.jpg new file mode 100644 index 00000000..89b581ef Binary files /dev/null and b/translated_images/ribbon-mic.eacc8e092c7441caee6d7a81e2f40e1675bf36269848964c7c09c9a9acb05127.it.jpg differ diff --git a/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.hi.jpg b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.hi.jpg new file mode 100644 index 00000000..6efd2da1 Binary files /dev/null and b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.hi.jpg differ diff --git a/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.it.jpg b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.it.jpg new file mode 100644 index 00000000..6efd2da1 Binary files /dev/null and b/translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.it.jpg differ diff --git a/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.hi.png b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.hi.png new file mode 100644 index 00000000..348fe7a0 Binary files /dev/null and b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.hi.png differ diff --git a/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.it.png b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.it.png new file mode 100644 index 00000000..348fe7a0 Binary files /dev/null and b/translated_images/sampling.6f4fadb3f2d9dfe7618f9edfe75a350e6b3f74293ec84f02ab69c19d2afe3d73.it.png differ diff --git a/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.hi.png b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.hi.png new file mode 100644 index 00000000..a69e73f4 Binary files /dev/null and b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.hi.png differ diff --git a/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.it.png b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.it.png new file mode 100644 index 00000000..a69e73f4 Binary files /dev/null and b/translated_images/save-telemetry-database.ddc9c6bea0c5ba39449966a463ca6748cd8e2d565dab44ff31c9f1d2f6c21d27.it.png differ diff --git a/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.hi.png b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.hi.png new file mode 100644 index 00000000..49b0ca9b Binary files /dev/null and b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.hi.png differ diff --git a/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.it.png b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.it.png new file mode 100644 index 00000000..49b0ca9b Binary files /dev/null and b/translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.it.png differ diff --git a/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.hi.png b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.hi.png new file mode 100644 index 00000000..458a3c95 Binary files /dev/null and b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.hi.png differ diff --git a/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.it.png b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.it.png new file mode 100644 index 00000000..458a3c95 Binary files /dev/null and b/translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.it.png differ diff --git a/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.hi.png b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.hi.png new file mode 100644 index 00000000..90b687c2 Binary files /dev/null and b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.hi.png differ diff --git a/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.it.png b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.it.png new file mode 100644 index 00000000..90b687c2 Binary files /dev/null and b/translated_images/seeed-logo.74732b6b482b6e8e8bdcc06f0541fc92b1dabf5e3e8f37afb91e04393a8cb977.it.png differ diff --git a/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.hi.png b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.hi.png new file mode 100644 index 00000000..cb4bc445 Binary files /dev/null and b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.hi.png differ diff --git a/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.it.png b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.it.png new file mode 100644 index 00000000..cb4bc445 Binary files /dev/null and b/translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.it.png differ diff --git a/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.hi.png b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.hi.png new file mode 100644 index 00000000..e7ea8ab6 Binary files /dev/null and b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.hi.png differ diff --git a/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.it.png b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.it.png new file mode 100644 index 00000000..e7ea8ab6 Binary files /dev/null and b/translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.it.png differ diff --git a/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.hi.png b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.hi.png new file mode 100644 index 00000000..6f138cf9 Binary files /dev/null and b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.hi.png differ diff --git a/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.it.png b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.it.png new file mode 100644 index 00000000..6f138cf9 Binary files /dev/null and b/translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.it.png differ diff --git a/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.hi.png b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.hi.png new file mode 100644 index 00000000..2f5f2861 Binary files /dev/null and b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.hi.png differ diff --git a/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.it.png b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.it.png new file mode 100644 index 00000000..2f5f2861 Binary files /dev/null and b/translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.it.png differ diff --git a/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.hi.png b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.hi.png new file mode 100644 index 00000000..f2f1b63e Binary files /dev/null and b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.hi.png differ diff --git a/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.it.png b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.it.png new file mode 100644 index 00000000..f2f1b63e Binary files /dev/null and b/translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.it.png differ diff --git a/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.hi.png b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.hi.png new file mode 100644 index 00000000..5643c164 Binary files /dev/null and b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.hi.png differ diff --git a/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.it.png b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.it.png new file mode 100644 index 00000000..5643c164 Binary files /dev/null and b/translated_images/sentence-as-intent-entities.301401696f9922590a99343f5c5d211b710b906f212f0d4d034cee3ffb610272.it.png differ diff --git a/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.hi.png b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.hi.png new file mode 100644 index 00000000..73fa30d1 Binary files /dev/null and b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.hi.png differ diff --git a/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.it.png b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.it.png new file mode 100644 index 00000000..73fa30d1 Binary files /dev/null and b/translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.it.png differ diff --git a/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.hi.png b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.hi.png new file mode 100644 index 00000000..eee39f7d Binary files /dev/null and b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.hi.png differ diff --git a/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.it.png b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.it.png new file mode 100644 index 00000000..eee39f7d Binary files /dev/null and b/translated_images/shapes-to-images.1a309f0ea88dd66fafa4da6d38e88806ce174cc6a88081efb32852230ed55de8.it.png differ diff --git a/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.hi.png b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.hi.png new file mode 100644 index 00000000..5a0fb117 Binary files /dev/null and b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.hi.png differ diff --git a/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.it.png b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.it.png new file mode 100644 index 00000000..5a0fb117 Binary files /dev/null and b/translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.it.png differ diff --git a/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.hi.png b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.hi.png new file mode 100644 index 00000000..27ddbfee Binary files /dev/null and b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.hi.png differ diff --git a/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.it.png b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.it.png new file mode 100644 index 00000000..27ddbfee Binary files /dev/null and b/translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.it.png differ diff --git a/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.hi.png b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.hi.png new file mode 100644 index 00000000..ee07bd10 Binary files /dev/null and b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.hi.png differ diff --git a/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.it.png b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.it.png new file mode 100644 index 00000000..ee07bd10 Binary files /dev/null and b/translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.it.png differ diff --git a/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.hi.png b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.hi.png new file mode 100644 index 00000000..37a2464a Binary files /dev/null and b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.hi.png differ diff --git a/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.it.png b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.it.png new file mode 100644 index 00000000..37a2464a Binary files /dev/null and b/translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.it.png differ diff --git a/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.hi.png b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.hi.png new file mode 100644 index 00000000..d852153c Binary files /dev/null and b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.hi.png differ diff --git a/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.it.png b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.it.png new file mode 100644 index 00000000..d852153c Binary files /dev/null and b/translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.it.png differ diff --git a/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.hi.png b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.hi.png new file mode 100644 index 00000000..a457ac8d Binary files /dev/null and b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.hi.png differ diff --git a/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.it.png b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.it.png new file mode 100644 index 00000000..a457ac8d Binary files /dev/null and b/translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.it.png differ diff --git a/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.hi.png b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.hi.png new file mode 100644 index 00000000..3eccd326 Binary files /dev/null and b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.hi.png differ diff --git a/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.it.png b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.it.png new file mode 100644 index 00000000..3eccd326 Binary files /dev/null and b/translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.it.png differ diff --git a/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.hi.png b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.hi.png new file mode 100644 index 00000000..49083372 Binary files /dev/null and b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.hi.png differ diff --git a/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.it.png b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.it.png new file mode 100644 index 00000000..49083372 Binary files /dev/null and b/translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.it.png differ diff --git a/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.hi.png b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.hi.png new file mode 100644 index 00000000..1b4a94e5 Binary files /dev/null and b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.hi.png differ diff --git a/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.it.png b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.it.png new file mode 100644 index 00000000..1b4a94e5 Binary files /dev/null and b/translated_images/stock-7-cans-tomato-paste.f86059cc573d7becaa89a0eafb9d2cd7e2fe37405a530fe565990e2333d0e4a1.it.png differ diff --git a/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.hi.png b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.hi.png new file mode 100644 index 00000000..8589e88f Binary files /dev/null and b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.hi.png differ diff --git a/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.it.png b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.it.png new file mode 100644 index 00000000..8589e88f Binary files /dev/null and b/translated_images/stock-rogue-corn.be1f3ada8c4578544641af66671c1711a4c02297f14cc7f503354dae0d30a954.it.png differ diff --git a/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.hi.png b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.hi.png new file mode 100644 index 00000000..e1246f56 Binary files /dev/null and b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.hi.png differ diff --git a/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.it.png b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.it.png new file mode 100644 index 00000000..e1246f56 Binary files /dev/null and b/translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.it.png differ diff --git a/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.hi.png b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.hi.png new file mode 100644 index 00000000..db66a52b Binary files /dev/null and b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.hi.png differ diff --git a/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.it.png b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.it.png new file mode 100644 index 00000000..db66a52b Binary files /dev/null and b/translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.it.png differ diff --git a/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.hi.png b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.hi.png new file mode 100644 index 00000000..66c76c2f Binary files /dev/null and b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.hi.png differ diff --git a/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.it.png b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.it.png new file mode 100644 index 00000000..66c76c2f Binary files /dev/null and b/translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.it.png differ diff --git a/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.hi.png b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.hi.png new file mode 100644 index 00000000..450b824c Binary files /dev/null and b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.hi.png differ diff --git a/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.it.png b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.it.png new file mode 100644 index 00000000..450b824c Binary files /dev/null and b/translated_images/time-of-flight-banana.079921ad8b1496e4525dc26b4cdc71a076407aba3e72ba113ba2e38febae92c5.it.png differ diff --git a/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.hi.png b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.hi.png new file mode 100644 index 00000000..615bc7a9 Binary files /dev/null and b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.hi.png differ diff --git a/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.it.png b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.it.png new file mode 100644 index 00000000..615bc7a9 Binary files /dev/null and b/translated_images/traditional-vs-ml.5c20c169621fa539ca84a2cd9a49f6ff7410b3a6c6b46c97ff2af3f99db3c66b.it.png differ diff --git a/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.hi.png b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.hi.png new file mode 100644 index 00000000..3c9e2930 Binary files /dev/null and b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.hi.png differ diff --git a/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.it.png b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.it.png new file mode 100644 index 00000000..3c9e2930 Binary files /dev/null and b/translated_images/translated-smart-timer.08ac20057fdc5c3778ed41cb425dca5d7fbcd4584b6da7b73ca67115a5b8a883.it.png differ diff --git a/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.hi.png b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.hi.png new file mode 100644 index 00000000..e4bb0186 Binary files /dev/null and b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.hi.png differ diff --git a/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.it.png b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.it.png new file mode 100644 index 00000000..e4bb0186 Binary files /dev/null and b/translated_images/transpiration.b735aa34e4372e659f76d82527e9ce683f076d56065d0d8fddf13321666f4d80.it.png differ diff --git a/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.hi.png b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.hi.png new file mode 100644 index 00000000..91e4cba6 Binary files /dev/null and b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.hi.png differ diff --git a/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.it.png b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.it.png new file mode 100644 index 00000000..91e4cba6 Binary files /dev/null and b/translated_images/tts-overview.193843cf3f5ee09f8b3371a9fdaeb0f116698a07ca69daaa77158da4800e5453.it.png differ diff --git a/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.hi.png b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.hi.png new file mode 100644 index 00000000..91230d0c Binary files /dev/null and b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.hi.png differ diff --git a/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.it.png b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.it.png new file mode 100644 index 00000000..91230d0c Binary files /dev/null and b/translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.it.png differ diff --git a/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.hi.png b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.hi.png new file mode 100644 index 00000000..128cd4a9 Binary files /dev/null and b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.hi.png differ diff --git a/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.it.png b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.it.png new file mode 100644 index 00000000..128cd4a9 Binary files /dev/null and b/translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.it.png differ diff --git a/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.hi.png b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.hi.png new file mode 100644 index 00000000..8d62d827 Binary files /dev/null and b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.hi.png differ diff --git a/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.it.png b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.it.png new file mode 100644 index 00000000..8d62d827 Binary files /dev/null and b/translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.it.png differ diff --git a/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.hi.png b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.hi.png new file mode 100644 index 00000000..a84ab661 Binary files /dev/null and b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.hi.png differ diff --git a/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.it.png b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.it.png new file mode 100644 index 00000000..a84ab661 Binary files /dev/null and b/translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.it.png differ diff --git a/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.hi.png b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.hi.png new file mode 100644 index 00000000..4c88d3d3 Binary files /dev/null and b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.hi.png differ diff --git a/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.it.png b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.it.png new file mode 100644 index 00000000..4c88d3d3 Binary files /dev/null and b/translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.it.png differ diff --git a/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.hi.png b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.hi.png new file mode 100644 index 00000000..bc1895b8 Binary files /dev/null and b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.hi.png differ diff --git a/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.it.png b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.it.png new file mode 100644 index 00000000..bc1895b8 Binary files /dev/null and b/translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.it.png differ diff --git a/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.hi.png b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.hi.png new file mode 100644 index 00000000..d8ff3180 Binary files /dev/null and b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.hi.png differ diff --git a/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.it.png b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.it.png new file mode 100644 index 00000000..d8ff3180 Binary files /dev/null and b/translated_images/vscode-platformio-build-command-palette.7708e7ec7d75d7ee1a0551f42229a321c7e2e4bccac7f1a64df2ed55999f723d.it.png differ diff --git a/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.hi.png b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.hi.png new file mode 100644 index 00000000..06b86a65 Binary files /dev/null and b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.hi.png differ diff --git a/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.it.png b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.it.png new file mode 100644 index 00000000..06b86a65 Binary files /dev/null and b/translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.it.png differ diff --git a/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.hi.png b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.hi.png new file mode 100644 index 00000000..ac7aa47a Binary files /dev/null and b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.hi.png differ diff --git a/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.it.png b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.it.png new file mode 100644 index 00000000..ac7aa47a Binary files /dev/null and b/translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.it.png differ diff --git a/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.hi.png b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.hi.png new file mode 100644 index 00000000..20480a22 Binary files /dev/null and b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.hi.png differ diff --git a/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.it.png b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.it.png new file mode 100644 index 00000000..20480a22 Binary files /dev/null and b/translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.it.png differ diff --git a/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.hi.png b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.hi.png new file mode 100644 index 00000000..9d90f435 Binary files /dev/null and b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.hi.png differ diff --git a/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.it.png b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.it.png new file mode 100644 index 00000000..9d90f435 Binary files /dev/null and b/translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.it.png differ diff --git a/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.hi.png b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.hi.png new file mode 100644 index 00000000..27b0ea2c Binary files /dev/null and b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.hi.png differ diff --git a/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.it.png b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.it.png new file mode 100644 index 00000000..27b0ea2c Binary files /dev/null and b/translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.it.png differ diff --git a/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.hi.png b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.hi.png new file mode 100644 index 00000000..3526a6d0 Binary files /dev/null and b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.hi.png differ diff --git a/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.it.png b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.it.png new file mode 100644 index 00000000..3526a6d0 Binary files /dev/null and b/translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.it.png differ diff --git a/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.hi.png b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.hi.png new file mode 100644 index 00000000..855d442e Binary files /dev/null and b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.hi.png differ diff --git a/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.it.png b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.it.png new file mode 100644 index 00000000..855d442e Binary files /dev/null and b/translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.it.png differ diff --git a/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.hi.png b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.hi.png new file mode 100644 index 00000000..aed3d813 Binary files /dev/null and b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.hi.png differ diff --git a/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.it.png b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.it.png new file mode 100644 index 00000000..aed3d813 Binary files /dev/null and b/translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.it.png differ diff --git a/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.hi.png b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.hi.png new file mode 100644 index 00000000..9bfca6c2 Binary files /dev/null and b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.hi.png differ diff --git a/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.it.png b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.it.png new file mode 100644 index 00000000..9bfca6c2 Binary files /dev/null and b/translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.it.png differ diff --git a/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.hi.png b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.hi.png new file mode 100644 index 00000000..0490e302 Binary files /dev/null and b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.hi.png differ diff --git a/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.it.png b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.it.png new file mode 100644 index 00000000..0490e302 Binary files /dev/null and b/translated_images/wio-hardware-kit.4c70c48b85e4283a1d73e248d87d49587c0cd077eeb69cb3eca803166f63c9a5.it.png differ diff --git a/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.hi.png b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.hi.png new file mode 100644 index 00000000..676e2378 Binary files /dev/null and b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.hi.png differ diff --git a/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.it.png b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.it.png new file mode 100644 index 00000000..676e2378 Binary files /dev/null and b/translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.it.png differ diff --git a/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.hi.png b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.hi.png new file mode 100644 index 00000000..280e18c3 Binary files /dev/null and b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.hi.png differ diff --git a/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.it.png b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.it.png new file mode 100644 index 00000000..280e18c3 Binary files /dev/null and b/translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.it.png differ diff --git a/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.hi.png b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.hi.png new file mode 100644 index 00000000..bb70a905 Binary files /dev/null and b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.hi.png differ diff --git a/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.it.png b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.it.png new file mode 100644 index 00000000..bb70a905 Binary files /dev/null and b/translated_images/wio-mic.3f8c843dbe8ad917424037a93e3d25c62634add00a04dd8e091317b5a7a90088.it.png differ diff --git a/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.hi.png b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.hi.png new file mode 100644 index 00000000..c0860d6e Binary files /dev/null and b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.hi.png differ diff --git a/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.it.png b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.it.png new file mode 100644 index 00000000..c0860d6e Binary files /dev/null and b/translated_images/wio-relay-and-soil-moisture-sensor.ed722202d42babe0be5f4518cf13e8c2c81e8df21d37839266cbdb60cf30172d.it.png differ diff --git a/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.hi.png b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.hi.png new file mode 100644 index 00000000..9a34d708 Binary files /dev/null and b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.hi.png differ diff --git a/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.it.png b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.it.png new file mode 100644 index 00000000..9a34d708 Binary files /dev/null and b/translated_images/wio-respeaker-hat.bd54917d446e6f6f142f9371ea52c12fd708873986bf46191208a151cd929bad.it.png differ diff --git a/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.hi.png b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.hi.png new file mode 100644 index 00000000..2c683d8b Binary files /dev/null and b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.hi.png differ diff --git a/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.it.png b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.it.png new file mode 100644 index 00000000..2c683d8b Binary files /dev/null and b/translated_images/wio-respeaker-wiring-0.767f80aa6508103880d256cdf99ee7219e190db257c7261e4aec219759dc67b9.it.png differ diff --git a/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.hi.png b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.hi.png new file mode 100644 index 00000000..1ba4c5b0 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.hi.png differ diff --git a/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.it.png b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.it.png new file mode 100644 index 00000000..1ba4c5b0 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-1.8d894727f2ba24004824ee5e06b83b6d10952550003a3efb603182121521b0ef.it.png differ diff --git a/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.hi.png b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.hi.png new file mode 100644 index 00000000..93aa3743 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.hi.png differ diff --git a/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.it.png b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.it.png new file mode 100644 index 00000000..93aa3743 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-2.329e1cbd306e754f8ffe56f9294794f4a8fa123860d76067a79e9ea385d1bf56.it.png differ diff --git a/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.hi.png b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.hi.png new file mode 100644 index 00000000..3089e5e1 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.hi.png differ diff --git a/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.it.png b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.it.png new file mode 100644 index 00000000..3089e5e1 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-3.75b0be447e2fa9307a6a954f9ae8a71b77e39ada6a5ef1a059d341dc850fd90c.it.png differ diff --git a/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.hi.png b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.hi.png new file mode 100644 index 00000000..53468420 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.hi.png differ diff --git a/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.it.png b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.it.png new file mode 100644 index 00000000..53468420 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-4.aa9cd434d8779437de720cba2719d83992413caed1b620b6148f6c8924889afb.it.png differ diff --git a/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.hi.png b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.hi.png new file mode 100644 index 00000000..003dc174 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.hi.png differ diff --git a/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.it.png b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.it.png new file mode 100644 index 00000000..003dc174 Binary files /dev/null and b/translated_images/wio-respeaker-wiring-5.af117c20acf622f3cd656ccd8f4053f8845d6aaa3af164d24cb7dbd54a4bb470.it.png differ diff --git a/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.hi.png b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.hi.png new file mode 100644 index 00000000..3c0d2f87 Binary files /dev/null and b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.hi.png differ diff --git a/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.it.png b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.it.png new file mode 100644 index 00000000..3c0d2f87 Binary files /dev/null and b/translated_images/wio-sd-card.acdcbe322fa4ee7f8f9c8cc015b3263964bb26ab5c7e25b41747988cc5280d64.it.png differ diff --git a/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.hi.png b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.hi.png new file mode 100644 index 00000000..56f285f2 Binary files /dev/null and b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.hi.png differ diff --git a/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.it.png b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.it.png new file mode 100644 index 00000000..56f285f2 Binary files /dev/null and b/translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.it.png differ diff --git a/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.hi.png b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.hi.png new file mode 100644 index 00000000..ec8bbe2f Binary files /dev/null and b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.hi.png differ diff --git a/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.it.png b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.it.png new file mode 100644 index 00000000..ec8bbe2f Binary files /dev/null and b/translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.it.png differ diff --git a/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.hi.png b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.hi.png new file mode 100644 index 00000000..bbaae894 Binary files /dev/null and b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.hi.png differ diff --git a/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.it.png b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.it.png new file mode 100644 index 00000000..bbaae894 Binary files /dev/null and b/translated_images/wio-terminal-c-button.73df3cb1c1445ea07ee98316af0e7925fcb43135df0abed58d3d4822b2589c3b.it.png differ diff --git a/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.hi.png b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.hi.png new file mode 100644 index 00000000..ef71f6da Binary files /dev/null and b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.hi.png differ diff --git a/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.it.png b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.it.png new file mode 100644 index 00000000..ef71f6da Binary files /dev/null and b/translated_images/wio-terminal-pin-sticker.b90b1535937b84bd00d853f0004aea74fac2aec04b43f14b887796b2633f855e.it.png differ diff --git a/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.hi.png b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.hi.png new file mode 100644 index 00000000..4e9390eb Binary files /dev/null and b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.hi.png differ diff --git a/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.it.png b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.it.png new file mode 100644 index 00000000..4e9390eb Binary files /dev/null and b/translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.it.png differ diff --git a/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.hi.png b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.hi.png new file mode 100644 index 00000000..16d7af80 Binary files /dev/null and b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.hi.png differ diff --git a/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.it.png b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.it.png new file mode 100644 index 00000000..16d7af80 Binary files /dev/null and b/translated_images/wio-time-of-flight-sensor.c4c182131d2ea73df67febd004dc0313d271013d016be9c47e7da4d77c6c20a8.it.png differ diff --git a/translations/hi/1-getting-started/README.md b/translations/hi/1-getting-started/README.md new file mode 100644 index 00000000..d0a99587 --- /dev/null +++ b/translations/hi/1-getting-started/README.md @@ -0,0 +1,28 @@ + +# IoT के साथ शुरुआत + +इस पाठ्यक्रम के इस भाग में, आपको इंटरनेट ऑफ थिंग्स से परिचित कराया जाएगा और आप बुनियादी अवधारणाओं को सीखेंगे, जिसमें आपका पहला 'Hello World' IoT प्रोजेक्ट बनाना शामिल है जो क्लाउड से जुड़ता है। यह प्रोजेक्ट एक नाइटलाइट है जो तब जलता है जब सेंसर द्वारा मापे गए प्रकाश स्तर कम हो जाते हैं। + +![WIO से जुड़ा LED प्रकाश स्तर बदलने पर चालू और बंद होता हुआ](../../../images/wio-running-assignment-1-1.gif) + +## विषय + +1. [IoT का परिचय](lessons/1-introduction-to-iot/README.md) +1. [IoT में गहराई से जानकारी](lessons/2-deeper-dive/README.md) +1. [सेंसर और एक्ट्यूएटर्स के साथ भौतिक दुनिया से संपर्क करें](lessons/3-sensors-and-actuators/README.md) +1. [अपने डिवाइस को इंटरनेट से कनेक्ट करें](lessons/4-connect-internet/README.md) + +## श्रेय + +सभी पाठ [Jim Bennett](https://GitHub.com/JimBobBennett) द्वारा ♥️ के साथ लिखे गए हैं। + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/1-introduction-to-iot/README.md b/translations/hi/1-getting-started/lessons/1-introduction-to-iot/README.md new file mode 100644 index 00000000..4860a8dc --- /dev/null +++ b/translations/hi/1-getting-started/lessons/1-introduction-to-iot/README.md @@ -0,0 +1,240 @@ + +# IoT का परिचय + +![इस पाठ का स्केच नोट](../../../../../translated_images/lesson-1.2606670fa61ee904687da5d6fa4e726639d524d064c895117da1b95b9ff6251d.hi.jpg) + +> स्केच नोट [नित्या नरसिम्हन](https://github.com/nitya) द्वारा। बड़ी छवि देखने के लिए चित्र पर क्लिक करें। + +यह पाठ [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn) के [Hello IoT series](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) का हिस्सा था। इसे दो वीडियो के रूप में पढ़ाया गया - एक 1 घंटे का पाठ और एक 1 घंटे का ऑफिस आवर, जिसमें पाठ के हिस्सों को गहराई से समझाया गया और सवालों के जवाब दिए गए। + +[![पाठ 1: IoT का परिचय](https://img.youtube.com/vi/bVFfcYh6UBw/0.jpg)](https://youtu.be/bVFfcYh6UBw) + +[![पाठ 1: IoT का परिचय - ऑफिस आवर](https://img.youtube.com/vi/YI772q5v3yI/0.jpg)](https://youtu.be/YI772q5v3yI) + +> 🎥 ऊपर दिए गए चित्रों पर क्लिक करें और वीडियो देखें + +## प्री-लेक्चर क्विज़ + +[प्री-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/1) + +## परिचय + +यह पाठ इंटरनेट ऑफ थिंग्स (IoT) के कुछ प्रारंभिक विषयों को कवर करता है और आपको अपना हार्डवेयर सेटअप करने में मदद करता है। + +इस पाठ में हम निम्नलिखित विषयों को कवर करेंगे: + +* [इंटरनेट ऑफ थिंग्स क्या है?](../../../../../1-getting-started/lessons/1-introduction-to-iot) +* [IoT डिवाइस](../../../../../1-getting-started/lessons/1-introduction-to-iot) +* [अपना डिवाइस सेट करें](../../../../../1-getting-started/lessons/1-introduction-to-iot) +* [IoT के अनुप्रयोग](../../../../../1-getting-started/lessons/1-introduction-to-iot) +* [आपके आसपास मौजूद IoT डिवाइस के उदाहरण](../../../../../1-getting-started/lessons/1-introduction-to-iot) + +## इंटरनेट ऑफ थिंग्स क्या है? + +'इंटरनेट ऑफ थिंग्स' शब्द को [केविन एश्टन](https://wikipedia.org/wiki/Kevin_Ashton) ने 1999 में गढ़ा था, जिसका उद्देश्य सेंसर के माध्यम से इंटरनेट को भौतिक दुनिया से जोड़ना था। तब से, इस शब्द का उपयोग किसी भी डिवाइस को वर्णित करने के लिए किया गया है जो अपने आसपास की भौतिक दुनिया के साथ इंटरैक्ट करता है, चाहे वह सेंसर से डेटा एकत्र कर रहा हो या एक्टुएटर्स (जैसे स्विच चालू करना या LED जलाना) के माध्यम से वास्तविक दुनिया में इंटरैक्शन प्रदान कर रहा हो। ये डिवाइस आमतौर पर अन्य डिवाइस या इंटरनेट से जुड़े होते हैं। + +> **सेंसर** दुनिया से जानकारी एकत्र करते हैं, जैसे गति, तापमान या स्थान को मापना। +> +> **एक्टुएटर्स** विद्युत संकेतों को वास्तविक दुनिया के इंटरैक्शन में बदलते हैं, जैसे स्विच चालू करना, लाइट जलाना, ध्वनि उत्पन्न करना, या अन्य हार्डवेयर को नियंत्रण संकेत भेजना, उदाहरण के लिए, पावर सॉकेट चालू करना। + +IoT केवल डिवाइस तक सीमित नहीं है - इसमें क्लाउड-आधारित सेवाएं भी शामिल हैं जो सेंसर डेटा को प्रोसेस कर सकती हैं या IoT डिवाइस से जुड़े एक्टुएटर्स को अनुरोध भेज सकती हैं। इसमें ऐसे डिवाइस भी शामिल हैं जो इंटरनेट कनेक्टिविटी नहीं रखते या इसकी आवश्यकता नहीं होती, जिन्हें अक्सर एज डिवाइस कहा जाता है। ये डिवाइस आमतौर पर क्लाउड में प्रशिक्षित AI मॉडल का उपयोग करके सेंसर डेटा को स्वयं प्रोसेस और प्रतिक्रिया देते हैं। + +IoT एक तेजी से बढ़ता हुआ तकनीकी क्षेत्र है। अनुमान है कि 2020 के अंत तक, 30 बिलियन IoT डिवाइस इंटरनेट से जुड़े थे। भविष्य की ओर देखते हुए, अनुमान है कि 2025 तक IoT डिवाइस लगभग 80 ज़ेटाबाइट्स डेटा या 80 ट्रिलियन गीगाबाइट्स डेटा एकत्र करेंगे। यह बहुत सारा डेटा है! + +![एक ग्राफ जो समय के साथ सक्रिय IoT डिवाइस दिखाता है, 2015 में 5 बिलियन से कम से 2025 में 30 बिलियन से अधिक तक](../../../../../images/connected-iot-devices.svg) + +✅ थोड़ा शोध करें: IoT डिवाइस द्वारा उत्पन्न डेटा का कितना हिस्सा वास्तव में उपयोग किया जाता है, और कितना बर्बाद होता है? इतना डेटा क्यों अनदेखा किया जाता है? + +यह डेटा IoT की सफलता की कुंजी है। एक सफल IoT डेवलपर बनने के लिए, आपको यह समझने की आवश्यकता है कि आपको कौन सा डेटा एकत्र करना है, इसे कैसे एकत्र करना है, इसके आधार पर निर्णय कैसे लेना है, और यदि आवश्यक हो तो इन निर्णयों का उपयोग भौतिक दुनिया के साथ इंटरैक्ट करने के लिए कैसे करना है। + +## IoT डिवाइस + +IoT में **T** का मतलब **थिंग्स** है - डिवाइस जो अपने आसपास की भौतिक दुनिया के साथ इंटरैक्ट करते हैं, चाहे वह सेंसर से डेटा एकत्र कर रहे हों या एक्टुएटर्स के माध्यम से वास्तविक दुनिया में इंटरैक्शन प्रदान कर रहे हों। + +उत्पादन या व्यावसायिक उपयोग के लिए डिवाइस, जैसे उपभोक्ता फिटनेस ट्रैकर्स या औद्योगिक मशीन नियंत्रक, आमतौर पर कस्टम-निर्मित होते हैं। ये कस्टम सर्किट बोर्ड का उपयोग करते हैं, शायद कस्टम प्रोसेसर भी, जो किसी विशेष कार्य की आवश्यकताओं को पूरा करने के लिए डिज़ाइन किए गए हैं, चाहे वह कलाई पर फिट होने के लिए छोटा हो, या उच्च तापमान, उच्च तनाव या उच्च कंपन वाले फैक्ट्री वातावरण में काम करने के लिए मजबूत हो। + +एक डेवलपर के रूप में, चाहे आप IoT के बारे में सीख रहे हों या डिवाइस प्रोटोटाइप बना रहे हों, आपको एक डेवलपर किट से शुरुआत करनी होगी। ये सामान्य-उद्देश्य IoT डिवाइस होते हैं जो डेवलपर्स के उपयोग के लिए डिज़ाइन किए गए हैं, अक्सर ऐसी सुविधाओं के साथ जो उत्पादन डिवाइस पर नहीं होंगी, जैसे सेंसर या एक्टुएटर्स को जोड़ने के लिए बाहरी पिन का सेट, डिबगिंग का समर्थन करने वाला हार्डवेयर, या अतिरिक्त संसाधन जो बड़े पैमाने पर निर्माण के दौरान अनावश्यक लागत जोड़ देंगे। + +ये डेवलपर किट आमतौर पर दो श्रेणियों में आते हैं - माइक्रोकंट्रोलर्स और सिंगल-बोर्ड कंप्यूटर। इन्हें यहां पेश किया जाएगा, और हम अगले पाठ में अधिक विस्तार से चर्चा करेंगे। + +> 💁 आपका फोन भी एक सामान्य-उद्देश्य IoT डिवाइस माना जा सकता है, जिसमें सेंसर और एक्टुएटर्स बिल्ट-इन होते हैं, विभिन्न ऐप्स सेंसर और एक्टुएटर्स का उपयोग विभिन्न तरीकों से विभिन्न क्लाउड सेवाओं के साथ करते हैं। आप कुछ IoT ट्यूटोरियल भी पा सकते हैं जो फोन ऐप को IoT डिवाइस के रूप में उपयोग करते हैं। + +### माइक्रोकंट्रोलर्स + +माइक्रोकंट्रोलर (जिसे MCU, माइक्रोकंट्रोलर यूनिट के लिए संक्षिप्त भी कहा जाता है) एक छोटा कंप्यूटर है जिसमें शामिल हैं: + +🧠 एक या अधिक केंद्रीय प्रोसेसिंग यूनिट्स (CPUs) - माइक्रोकंट्रोलर का 'मस्तिष्क' जो आपका प्रोग्राम चलाता है + +💾 मेमोरी (RAM और प्रोग्राम मेमोरी) - जहां आपका प्रोग्राम, डेटा और वेरिएबल्स संग्रहीत होते हैं + +🔌 प्रोग्रामेबल इनपुट/आउटपुट (I/O) कनेक्शन - बाहरी उपकरणों (जैसे सेंसर और एक्टुएटर्स) से बात करने के लिए + +माइक्रोकंट्रोलर्स आमतौर पर कम लागत वाले कंप्यूटिंग डिवाइस होते हैं, जिनकी औसत कीमत कस्टम हार्डवेयर में उपयोग किए जाने वाले डिवाइस के लिए लगभग US$0.50 तक गिर जाती है, और कुछ डिवाइस US$0.03 जितने सस्ते होते हैं। डेवलपर किट US$4 जितने कम से शुरू हो सकते हैं, और जैसे-जैसे आप अधिक सुविधाएँ जोड़ते हैं, लागत बढ़ती जाती है। [Wio Terminal](https://www.seeedstudio.com/Wio-Terminal-p-4509.html), [Seeed studios](https://www.seeedstudio.com) का एक माइक्रोकंट्रोलर डेवलपर किट जिसमें सेंसर, एक्टुएटर्स, WiFi और एक स्क्रीन है, इसकी कीमत लगभग US$30 है। + +![एक Wio Terminal](../../../../../translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.hi.png) + +> 💁 इंटरनेट पर माइक्रोकंट्रोलर्स खोजते समय, **MCU** शब्द खोजने से बचें क्योंकि यह आपको माइक्रोकंट्रोलर्स के बजाय मार्वल सिनेमैटिक यूनिवर्स के बहुत सारे परिणाम देगा। + +माइक्रोकंट्रोलर्स को कुछ बहुत ही विशिष्ट कार्यों को करने के लिए प्रोग्राम किया जाता है, बजाय इसके कि वे PCs या Macs जैसे सामान्य-उद्देश्य कंप्यूटर हों। बहुत ही विशिष्ट परिदृश्यों को छोड़कर, आप मॉनिटर, कीबोर्ड और माउस को कनेक्ट नहीं कर सकते और उन्हें सामान्य-उद्देश्य कार्यों के लिए उपयोग नहीं कर सकते। + +माइक्रोकंट्रोलर डेवलपर किट आमतौर पर बोर्ड पर अतिरिक्त सेंसर और एक्टुएटर्स के साथ आते हैं। अधिकांश बोर्डों में एक या अधिक LED होते हैं जिन्हें आप प्रोग्राम कर सकते हैं, साथ ही अन्य उपकरण जैसे विभिन्न निर्माताओं के इकोसिस्टम का उपयोग करके अधिक सेंसर या एक्टुएटर्स जोड़ने के लिए मानक प्लग या बिल्ट-इन सेंसर (आमतौर पर सबसे लोकप्रिय जैसे तापमान सेंसर)। कुछ माइक्रोकंट्रोलर्स में बिल्ट-इन वायरलेस कनेक्टिविटी होती है जैसे ब्लूटूथ या WiFi, या बोर्ड पर अतिरिक्त माइक्रोकंट्रोलर्स होते हैं जो इस कनेक्टिविटी को जोड़ते हैं। + +> 💁 माइक्रोकंट्रोलर्स आमतौर पर C/C++ में प्रोग्राम किए जाते हैं। + +### सिंगल-बोर्ड कंप्यूटर + +सिंगल-बोर्ड कंप्यूटर एक छोटा कंप्यूटिंग डिवाइस है जिसमें एक छोटे बोर्ड पर एक पूर्ण कंप्यूटर के सभी तत्व होते हैं। ये डिवाइस हैं जिनकी विशिष्टताएँ डेस्कटॉप या लैपटॉप PC या Mac के करीब होती हैं, एक पूर्ण ऑपरेटिंग सिस्टम चलाते हैं, लेकिन छोटे होते हैं, कम बिजली का उपयोग करते हैं, और काफी सस्ते होते हैं। + +![एक Raspberry Pi 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.hi.jpg) + +Raspberry Pi सबसे लोकप्रिय सिंगल-बोर्ड कंप्यूटरों में से एक है। + +माइक्रोकंट्रोलर की तरह, सिंगल-बोर्ड कंप्यूटर में CPU, मेमोरी और इनपुट/आउटपुट पिन होते हैं, लेकिन इनमें अतिरिक्त सुविधाएँ होती हैं जैसे ग्राफिक्स चिप जो आपको मॉनिटर, ऑडियो आउटपुट और USB पोर्ट को कनेक्ट करने की अनुमति देती है ताकि आप कीबोर्ड, माउस और अन्य मानक USB डिवाइस जैसे वेबकैम या बाहरी स्टोरेज को जोड़ सकें। प्रोग्राम SD कार्ड या हार्ड ड्राइव पर संग्रहीत होते हैं, साथ ही ऑपरेटिंग सिस्टम, बजाय इसके कि बोर्ड में निर्मित मेमोरी चिप पर। + +> 🎓 आप सिंगल-बोर्ड कंप्यूटर को उस PC या Mac का छोटा, सस्ता संस्करण मान सकते हैं जिसे आप इस समय पढ़ रहे हैं, जिसमें सेंसर और एक्टुएटर्स के साथ इंटरैक्ट करने के लिए GPIO (जनरल-पर्पस इनपुट/आउटपुट) पिन जोड़े गए हैं। + +सिंगल-बोर्ड कंप्यूटर पूरी तरह से फीचरयुक्त कंप्यूटर होते हैं, इसलिए इन्हें किसी भी भाषा में प्रोग्राम किया जा सकता है। IoT डिवाइस आमतौर पर Python में प्रोग्राम किए जाते हैं। + +### अगले पाठों के लिए हार्डवेयर विकल्प + +सभी आगामी पाठों में IoT डिवाइस का उपयोग करके भौतिक दुनिया के साथ इंटरैक्ट करने और क्लाउड के साथ संवाद करने के लिए असाइनमेंट शामिल हैं। प्रत्येक पाठ 3 डिवाइस विकल्पों का समर्थन करता है - Arduino (Seeed Studios Wio Terminal का उपयोग करते हुए), या सिंगल-बोर्ड कंप्यूटर, चाहे वह भौतिक डिवाइस (Raspberry Pi 4) हो या आपके PC या Mac पर चलने वाला वर्चुअल सिंगल-बोर्ड कंप्यूटर। + +आप सभी असाइनमेंट को पूरा करने के लिए आवश्यक हार्डवेयर के बारे में [हार्डवेयर गाइड](../../../hardware.md) में पढ़ सकते हैं। + +> 💁 आपको असाइनमेंट पूरा करने के लिए कोई IoT हार्डवेयर खरीदने की आवश्यकता नहीं है, आप सब कुछ वर्चुअल सिंगल-बोर्ड कंप्यूटर का उपयोग करके कर सकते हैं। + +आप कौन सा हार्डवेयर चुनते हैं, यह आप पर निर्भर करता है - यह इस बात पर निर्भर करता है कि आपके पास घर पर या स्कूल में क्या उपलब्ध है, और आप कौन सी प्रोग्रामिंग भाषा जानते हैं या सीखने की योजना बना रहे हैं। दोनों हार्डवेयर वेरिएंट एक ही सेंसर इकोसिस्टम का उपयोग करेंगे, इसलिए यदि आप एक रास्ते पर शुरू करते हैं, तो आप दूसरे पर स्विच कर सकते हैं बिना अधिकांश किट को बदलने की आवश्यकता के। वर्चुअल सिंगल-बोर्ड कंप्यूटर Raspberry Pi पर सीखने के बराबर होगा, जिसमें अधिकांश कोड Pi पर स्थानांतरित किया जा सकता है यदि आप अंततः एक डिवाइस और सेंसर प्राप्त करते हैं। + +### Arduino डेवलपर किट + +यदि आप माइक्रोकंट्रोलर डेवलपमेंट सीखने में रुचि रखते हैं, तो आप असाइनमेंट को Arduino डिवाइस का उपयोग करके पूरा कर सकते हैं। आपको C/C++ प्रोग्रामिंग की बुनियादी समझ की आवश्यकता होगी, क्योंकि पाठ केवल Arduino फ्रेमवर्क, उपयोग किए जा रहे सेंसर और एक्टुएटर्स, और क्लाउड के साथ इंटरैक्ट करने वाले लाइब्रेरी से संबंधित कोड सिखाएगा। + +असाइनमेंट [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-17441-jabenn) के साथ [PlatformIO माइक्रोकंट्रोलर डेवलपमेंट एक्सटेंशन](https://platformio.org) का उपयोग करेंगे। यदि आप इस टूल के साथ अनुभवी हैं, तो आप Arduino IDE का उपयोग भी कर सकते हैं, क्योंकि निर्देश प्रदान नहीं किए जाएंगे। + +### सिंगल-बोर्ड कंप्यूटर डेवलपर किट + +यदि आप सिंगल-बोर्ड कंप्यूटर का उपयोग करके IoT डेवलपमेंट सीखने में रुचि रखते हैं, तो आप Raspberry Pi या अपने PC या Mac पर चलने वाले वर्चुअल डिवाइस का उपयोग करके असाइनमेंट को पूरा कर सकते हैं। + +आपको Python प्रोग्रामिंग की बुनियादी समझ की आवश्यकता होगी, क्योंकि पाठ केवल उपयोग किए जा रहे सेंसर और एक्टुएटर्स, और क्लाउड के साथ इंटरैक्ट करने वाले लाइब्रेरी से संबंधित कोड सिखाएगा। + +> 💁 यदि आप Python में कोड करना सीखना चाहते हैं, तो निम्नलिखित दो वीडियो श्रृंखला देखें: +> +> * [Python for beginners](https://channel9.msdn.com/Series/Intro-to-Python-Development?WT.mc_id=academic-17441-jabenn) +> * [More Python for beginners](https://channel9.msdn.com/Series/More-Python-for-Beginners?WT.mc_id=academic-7372-jabenn) + +असाइनमेंट [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-17441-jabenn) का उपयोग करेंगे। + +यदि आप Raspberry Pi का उपयोग कर रहे हैं, तो आप Raspberry Pi OS के पूर्ण डेस्कटॉप संस्करण का उपयोग करके अपने Pi को चला सकते हैं, और [Raspberry Pi OS संस्करण VS Code](https://code.visualstudio.com/docs/setup/raspberry-pi?WT.mc_id=academic-17441-jabenn) का उपयोग करके Pi पर सीधे कोडिंग कर सकते हैं, या अपने Pi को हेडलेस डिवाइस के रूप में चला सकते हैं और [Remote SSH एक्सटेंशन](https://code.visualstudio.com/docs/remote/ssh?WT.mc_id=academic-17441-jabenn) का उपयोग करके अपने PC या Mac से कोड कर सकते हैं जो आपको अपने Pi से कनेक्ट करने और कोड को संपादित, डिबग और चलाने की अनुमति देता है जैसे कि आप इसे सीधे कोड कर रहे हों। + +यदि आप वर्चुअल डिवाइस विकल्प का उपयोग करते हैं, तो आप सीधे अपने कंप्यूटर पर कोड करेंगे। सेंसर और एक्टुएटर्स तक पहुंचने के बजाय, आप एक टूल का उपयोग करेंगे जो इस हार्डवेयर को सिमुलेट करता है, सेंसर मान प्रदान करता है जिसे आप परिभाषित कर सकते हैं, और स्क्रीन पर एक्टुएटर्स के परिणाम दिखाता है। + +## अपना डिवाइस सेट करें + +IoT डिवाइस को प्रोग्राम करना शुरू करने से पहले, आपको थोड़ा सा सेटअप करना होगा। नीचे दिए गए निर्देशों का पालन करें जो आपके द्वारा उपयोग किए जा रहे डिवाइस पर निर्भर करते हैं। +💁 यदि आपके पास अभी तक कोई डिवाइस नहीं है, तो [हार्डवेयर गाइड](../../../hardware.md) देखें ताकि आप तय कर सकें कि आप कौन सा डिवाइस उपयोग करने जा रहे हैं और आपको कौन सा अतिरिक्त हार्डवेयर खरीदने की आवश्यकता है। आपको हार्डवेयर खरीदने की आवश्यकता नहीं है, क्योंकि सभी प्रोजेक्ट्स वर्चुअल हार्डवेयर पर चलाए जा सकते हैं। +इन निर्देशों में उन हार्डवेयर या टूल्स के निर्माताओं की वेबसाइटों के लिंक शामिल हैं, जिन्हें आप उपयोग करने जा रहे हैं। इसका उद्देश्य यह सुनिश्चित करना है कि आप हमेशा विभिन्न टूल्स और हार्डवेयर के लिए सबसे अद्यतन निर्देशों का उपयोग करें। + +अपने डिवाइस को सेटअप करने और 'Hello World' प्रोजेक्ट पूरा करने के लिए संबंधित गाइड का पालन करें। यह इस आरंभिक भाग के 4 पाठों में IoT नाइटलाइट बनाने का पहला कदम होगा। + +* [Arduino - Wio Terminal](wio-terminal.md) +* [Single-board computer - Raspberry Pi](pi.md) +* [Single-board computer - Virtual device](virtual-device.md) + +✅ आप Arduino और Single-board computers दोनों के लिए VS Code का उपयोग करेंगे। यदि आपने इसे पहले उपयोग नहीं किया है, तो [VS Code साइट](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) पर इसके बारे में अधिक पढ़ें। + +## IoT के अनुप्रयोग + +IoT कई उपयोग मामलों को कवर करता है, जो कुछ व्यापक समूहों में विभाजित हैं: + +* उपभोक्ता IoT +* वाणिज्यिक IoT +* औद्योगिक IoT +* बुनियादी ढांचा IoT + +✅ थोड़ा शोध करें: नीचे वर्णित प्रत्येक क्षेत्र के लिए, एक ठोस उदाहरण खोजें जो पाठ में नहीं दिया गया है। + +### उपभोक्ता IoT + +उपभोक्ता IoT उन IoT उपकरणों को संदर्भित करता है जिन्हें उपभोक्ता घर के आसपास खरीदते और उपयोग करते हैं। इनमें से कुछ उपकरण बेहद उपयोगी होते हैं, जैसे स्मार्ट स्पीकर, स्मार्ट हीटिंग सिस्टम और रोबोटिक वैक्यूम क्लीनर। अन्य उपकरणों की उपयोगिता पर सवाल उठाया जा सकता है, जैसे वॉयस-कंट्रोल वाले नल, जिन्हें आप बंद नहीं कर सकते क्योंकि पानी के बहने की आवाज़ के कारण वॉयस कंट्रोल आपको सुन नहीं पाता। + +उपभोक्ता IoT उपकरण लोगों को उनके परिवेश में अधिक हासिल करने में सक्षम बना रहे हैं, विशेष रूप से उन 1 अरब लोगों को जो किसी न किसी प्रकार की विकलांगता से ग्रस्त हैं। रोबोटिक वैक्यूम क्लीनर उन लोगों के लिए साफ फर्श प्रदान कर सकते हैं जो खुद वैक्यूम नहीं कर सकते। वॉयस-कंट्रोल वाले ओवन सीमित दृष्टि या मोटर नियंत्रण वाले लोगों को केवल अपनी आवाज़ से ओवन गर्म करने की अनुमति देते हैं। स्वास्थ्य मॉनिटर मरीजों को अपने क्रॉनिक कंडीशन्स को अधिक नियमित और विस्तृत अपडेट के साथ खुद मॉनिटर करने की अनुमति देते हैं। ये उपकरण इतने सामान्य हो गए हैं कि छोटे बच्चे भी इन्हें अपने दैनिक जीवन का हिस्सा बना रहे हैं, जैसे COVID महामारी के दौरान वर्चुअल स्कूलिंग करने वाले छात्र स्मार्ट होम उपकरणों पर टाइमर सेट कर रहे हैं ताकि वे अपने स्कूलवर्क को ट्रैक कर सकें या आगामी कक्षा बैठकों की याद दिला सकें। + +✅ आपके पास या आपके घर में कौन-कौन से उपभोक्ता IoT उपकरण हैं? + +### वाणिज्यिक IoT + +वाणिज्यिक IoT कार्यस्थल में IoT के उपयोग को कवर करता है। एक ऑफिस सेटिंग में, लाइटिंग और हीटिंग को प्रबंधित करने के लिए ऑक्यूपेंसी सेंसर और मोशन डिटेक्टर हो सकते हैं ताकि केवल आवश्यक होने पर ही लाइट्स और हीट चालू रहें, जिससे लागत और कार्बन उत्सर्जन कम हो। एक फैक्ट्री में, IoT उपकरण सुरक्षा खतरों की निगरानी कर सकते हैं, जैसे कि श्रमिकों द्वारा हार्ड हैट न पहनना या खतरनाक स्तर तक पहुंचने वाला शोर। रिटेल में, IoT उपकरण ठंडे भंडारण के तापमान को माप सकते हैं, यदि फ्रिज या फ्रीजर आवश्यक तापमान सीमा से बाहर हो तो दुकान मालिक को सूचित कर सकते हैं। वे शेल्फ पर रखे सामान की निगरानी कर सकते हैं ताकि कर्मचारियों को बेचे गए उत्पादों को फिर से भरने के लिए निर्देशित किया जा सके। परिवहन उद्योग IoT पर अधिक से अधिक निर्भर हो रहा है ताकि वाहन स्थानों की निगरानी की जा सके, सड़क उपयोग शुल्क के लिए ऑन-रोड माइलेज को ट्रैक किया जा सके, ड्राइवर घंटों और ब्रेक अनुपालन को ट्रैक किया जा सके, या कर्मचारियों को सूचित किया जा सके जब कोई वाहन डिपो के पास पहुंच रहा हो ताकि लोडिंग या अनलोडिंग की तैयारी की जा सके। + +✅ आपके स्कूल या कार्यस्थल में कौन-कौन से वाणिज्यिक IoT उपकरण हैं? + +### औद्योगिक IoT (IIoT) + +औद्योगिक IoT, या IIoT, बड़े पैमाने पर मशीनरी को नियंत्रित और प्रबंधित करने के लिए IoT उपकरणों का उपयोग है। यह फैक्ट्रियों से लेकर डिजिटल कृषि तक कई उपयोग मामलों को कवर करता है। + +फैक्ट्रियां IoT उपकरणों का कई अलग-अलग तरीकों से उपयोग करती हैं। मशीनरी को तापमान, कंपन और रोटेशन गति जैसी चीजों को ट्रैक करने के लिए कई सेंसर के साथ मॉनिटर किया जा सकता है। इस डेटा की निगरानी की जा सकती है ताकि मशीन को बंद किया जा सके यदि यह कुछ सहनशीलता से बाहर हो जाए - उदाहरण के लिए, यह बहुत गर्म हो जाती है और इसे बंद कर दिया जाता है। इस डेटा को समय के साथ एकत्र और विश्लेषण किया जा सकता है ताकि प्रेडिक्टिव मेंटेनेंस किया जा सके, जहां AI मॉडल विफलता से पहले डेटा को देखता है और इसका उपयोग अन्य विफलताओं की भविष्यवाणी करने के लिए करता है। + +डिजिटल कृषि बढ़ती जनसंख्या को खिलाने के लिए महत्वपूर्ण है, विशेष रूप से उन 2 अरब लोगों के लिए जो 500 मिलियन घरों में [जीविका खेती](https://wikipedia.org/wiki/Subsistence_agriculture) पर निर्भर हैं। डिजिटल कृषि कुछ सस्ते सेंसर से लेकर बड़े वाणिज्यिक सेटअप तक हो सकती है। एक किसान तापमान की निगरानी करके और [ग्रोइंग डिग्री डेज़](https://wikipedia.org/wiki/Growing_degree-day) का उपयोग करके भविष्यवाणी कर सकता है कि फसल कब तैयार होगी। वे मिट्टी की नमी की निगरानी को स्वचालित सिंचाई प्रणालियों से जोड़ सकते हैं ताकि उनके पौधों को उतना ही पानी मिले जितना आवश्यक है, लेकिन अधिक नहीं, ताकि उनकी फसलें सूखें नहीं और पानी की बर्बादी न हो। किसान इसे और आगे ले जा रहे हैं और ड्रोन, सैटेलाइट डेटा और AI का उपयोग करके फसल की वृद्धि, बीमारी और मिट्टी की गुणवत्ता की निगरानी कर रहे हैं। + +✅ कौन-कौन से अन्य IoT उपकरण किसानों की मदद कर सकते हैं? + +### बुनियादी ढांचा IoT + +बुनियादी ढांचा IoT स्थानीय और वैश्विक बुनियादी ढांचे की निगरानी और नियंत्रण है जिसे लोग हर दिन उपयोग करते हैं। + +[स्मार्ट शहर](https://wikipedia.org/wiki/Smart_city) वे शहरी क्षेत्र हैं जो IoT उपकरणों का उपयोग करके शहर के बारे में डेटा एकत्र करते हैं और इसका उपयोग शहर को बेहतर तरीके से चलाने के लिए करते हैं। ये शहर आमतौर पर स्थानीय सरकारों, अकादमिक संस्थानों और स्थानीय व्यवसायों के सहयोग से चलाए जाते हैं, परिवहन से लेकर पार्किंग और प्रदूषण तक की चीजों को ट्रैक और प्रबंधित करते हैं। उदाहरण के लिए, कोपेनहेगन, डेनमार्क में, वायु प्रदूषण स्थानीय निवासियों के लिए महत्वपूर्ण है, इसलिए इसे मापा जाता है और डेटा का उपयोग सबसे स्वच्छ साइक्लिंग और जॉगिंग मार्गों की जानकारी प्रदान करने के लिए किया जाता है। + +[स्मार्ट पावर ग्रिड](https://wikipedia.org/wiki/Smart_grid) व्यक्तिगत घरों के स्तर पर उपयोग डेटा एकत्र करके बिजली की मांग का बेहतर विश्लेषण करने की अनुमति देते हैं। यह डेटा देश स्तर पर निर्णयों का मार्गदर्शन कर सकता है, जैसे कि नए पावर स्टेशन कहां बनाएं, और व्यक्तिगत स्तर पर उपयोगकर्ताओं को यह जानकारी दे सकता है कि वे कितनी बिजली का उपयोग कर रहे हैं, कब उपयोग कर रहे हैं, और यहां तक कि लागत कम करने के सुझाव भी दे सकता है, जैसे कि रात में इलेक्ट्रिक कार चार्ज करना। + +✅ यदि आप अपने क्षेत्र में किसी चीज़ को मापने के लिए IoT उपकरण जोड़ सकते हैं, तो वह क्या होगा? + +## आपके आसपास मौजूद IoT उपकरणों के उदाहरण + +आपके आसपास कितने IoT उपकरण हैं, यह जानकर आप हैरान हो सकते हैं। मैं यह घर से लिख रहा हूं और मेरे पास निम्नलिखित उपकरण हैं जो इंटरनेट से जुड़े हैं और स्मार्ट फीचर्स जैसे ऐप कंट्रोल, वॉयस कंट्रोल, या मेरे फोन के माध्यम से डेटा भेजने की क्षमता रखते हैं: + +* कई स्मार्ट स्पीकर +* फ्रिज, डिशवॉशर, ओवन और माइक्रोवेव +* सोलर पैनल के लिए बिजली मॉनिटर +* स्मार्ट प्लग्स +* वीडियो डोरबेल और सुरक्षा कैमरे +* स्मार्ट थर्मोस्टेट और कई स्मार्ट रूम सेंसर +* गेराज दरवाजा खोलने वाला +* होम एंटरटेनमेंट सिस्टम और वॉयस-कंट्रोल वाले टीवी +* लाइट्स +* फिटनेस और स्वास्थ्य ट्रैकर्स + +इन सभी प्रकार के उपकरणों में सेंसर और/या एक्टुएटर्स होते हैं और ये इंटरनेट से बात करते हैं। मैं अपने फोन से देख सकता हूं कि मेरा गेराज दरवाजा खुला है या नहीं, और अपने स्मार्ट स्पीकर से इसे बंद करने के लिए कह सकता हूं। मैं इसे टाइमर पर भी सेट कर सकता हूं ताकि अगर यह रात में खुला हो, तो यह स्वचालित रूप से बंद हो जाए। जब मेरी डोरबेल बजती है, तो मैं दुनिया में कहीं भी हूं, अपने फोन से देख सकता हूं कि वहां कौन है और डोरबेल में लगे स्पीकर और माइक्रोफोन के माध्यम से उनसे बात कर सकता हूं। मैं अपने रक्त ग्लूकोज, हृदय गति और नींद के पैटर्न की निगरानी कर सकता हूं, डेटा में पैटर्न की तलाश कर सकता हूं ताकि अपने स्वास्थ्य में सुधार कर सकूं। मैं क्लाउड के माध्यम से अपनी लाइट्स को नियंत्रित कर सकता हूं, और जब मेरा इंटरनेट कनेक्शन डाउन हो जाता है, तो अंधेरे में बैठ सकता हूं। + +--- + +## 🚀 चुनौती + +अपने घर, स्कूल या कार्यस्थल में जितने IoT उपकरण हो सकते हैं, उनकी सूची बनाएं - शायद वे आपकी सोच से अधिक हों! + +## पोस्ट-लेक्चर क्विज़ + +[पोस्ट-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/2) + +## समीक्षा और स्व-अध्ययन + +उपभोक्ता IoT प्रोजेक्ट्स के लाभ और विफलताओं के बारे में पढ़ें। समाचार साइटों पर उन लेखों की जांच करें जब यह गलत हो गया हो, जैसे गोपनीयता मुद्दे, हार्डवेयर समस्याएं या कनेक्टिविटी की कमी के कारण समस्याएं। + +कुछ उदाहरण: + +* **[Internet of Sh*t](https://twitter.com/internetofshit)** *(अश्लील भाषा चेतावनी)* ट्विटर अकाउंट पर उपभोक्ता IoT की विफलताओं के अच्छे उदाहरण देखें। +* [c|net - My Apple Watch saved my life: 5 people share their stories](https://www.cnet.com/news/apple-watch-lifesaving-health-features-read-5-peoples-stories/) +* [c|net - ADT technician pleads guilty to spying on customer camera feeds for years](https://www.cnet.com/news/adt-home-security-technician-pleads-guilty-to-spying-on-customer-camera-feeds-for-years/) *(ट्रिगर चेतावनी - गैर-सहमति वाली जासूसी)* + +## असाइनमेंट + +[एक IoT प्रोजेक्ट की जांच करें](assignment.md) + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/1-introduction-to-iot/assignment.md b/translations/hi/1-getting-started/lessons/1-introduction-to-iot/assignment.md new file mode 100644 index 00000000..1391cac2 --- /dev/null +++ b/translations/hi/1-getting-started/lessons/1-introduction-to-iot/assignment.md @@ -0,0 +1,25 @@ + +# एक IoT प्रोजेक्ट की जांच करें + +## निर्देश + +दुनिया भर में कई बड़े और छोटे पैमाने के IoT प्रोजेक्ट्स लागू किए जा रहे हैं, जैसे स्मार्ट फार्म से लेकर स्मार्ट सिटी तक, स्वास्थ्य निगरानी, परिवहन, और सार्वजनिक स्थानों के उपयोग के लिए। + +वेब पर ऐसा कोई प्रोजेक्ट खोजें जो आपको रुचिकर लगे, आदर्श रूप से आपके निवास स्थान के पास का हो। इस प्रोजेक्ट के फायदों और नुकसान की व्याख्या करें, जैसे इससे क्या लाभ होता है, यह कौन सी समस्याएं पैदा करता है और इसमें गोपनीयता का ध्यान कैसे रखा गया है। + +## मूल्यांकन मानदंड + +| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | +| -------- | --------- | -------- | ----------------- | +| फायदों और नुकसान की व्याख्या करें | प्रोजेक्ट के फायदों और नुकसान की स्पष्ट व्याख्या दी | प्रोजेक्ट के फायदों और नुकसान की संक्षिप्त व्याख्या दी | फायदों या नुकसान की व्याख्या नहीं की | + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/1-introduction-to-iot/pi.md b/translations/hi/1-getting-started/lessons/1-introduction-to-iot/pi.md new file mode 100644 index 00000000..4f8b9f25 --- /dev/null +++ b/translations/hi/1-getting-started/lessons/1-introduction-to-iot/pi.md @@ -0,0 +1,282 @@ + +# रास्पबेरी पाई + +[रास्पबेरी पाई](https://raspberrypi.org) एक सिंगल-बोर्ड कंप्यूटर है। आप विभिन्न उपकरणों और इकोसिस्टम का उपयोग करके सेंसर और एक्टुएटर्स जोड़ सकते हैं, और इन पाठों के लिए [Grove](https://www.seeedstudio.com/category/Grove-c-1003.html) नामक हार्डवेयर इकोसिस्टम का उपयोग करेंगे। आप अपने पाई को कोड करेंगे और Grove सेंसर का उपयोग Python के माध्यम से करेंगे। + +![रास्पबेरी पाई 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.hi.jpg) + +## सेटअप + +यदि आप रास्पबेरी पाई को अपने IoT हार्डवेयर के रूप में उपयोग कर रहे हैं, तो आपके पास दो विकल्प हैं - आप इन सभी पाठों को पूरा कर सकते हैं और सीधे पाई पर कोड कर सकते हैं, या आप 'हेडलैस' पाई से दूरस्थ रूप से कनेक्ट कर सकते हैं और अपने कंप्यूटर से कोड कर सकते हैं। + +शुरू करने से पहले, आपको Grove बेस हैट को अपने पाई से कनेक्ट करना होगा। + +### कार्य - सेटअप + +अपने पाई पर Grove बेस हैट इंस्टॉल करें और पाई को कॉन्फ़िगर करें। + +1. Grove बेस हैट को अपने पाई से कनेक्ट करें। हैट का सॉकेट पाई के सभी GPIO पिन्स पर फिट होता है, पिन्स पर पूरी तरह से नीचे स्लाइड करता है और बेस पर मजबूती से बैठता है। यह पाई को कवर करता है। + + ![Grove हैट फिट करना](../../../../../images/pi-grove-hat-fitting.gif) + +1. तय करें कि आप अपने पाई को कैसे प्रोग्राम करना चाहते हैं, और नीचे दिए गए संबंधित सेक्शन पर जाएं: + + * [पाई पर सीधे काम करें](../../../../../1-getting-started/lessons/1-introduction-to-iot) + * [पाई को कोड करने के लिए रिमोट एक्सेस](../../../../../1-getting-started/lessons/1-introduction-to-iot) + +### पाई पर सीधे काम करें + +यदि आप अपने पाई पर सीधे काम करना चाहते हैं, तो आप रास्पबेरी पाई OS का डेस्कटॉप संस्करण उपयोग कर सकते हैं और सभी आवश्यक टूल्स इंस्टॉल कर सकते हैं। + +#### कार्य - पाई पर सीधे काम करें + +डेवलपमेंट के लिए अपने पाई को सेटअप करें। + +1. [रास्पबेरी पाई सेटअप गाइड](https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up) में दिए गए निर्देशों का पालन करें ताकि आप अपने पाई को सेटअप कर सकें, इसे कीबोर्ड/माउस/मॉनिटर से कनेक्ट कर सकें, इसे अपने वाईफाई या ईथरनेट नेटवर्क से कनेक्ट कर सकें, और सॉफ़्टवेयर को अपडेट कर सकें। + +पाई को Grove सेंसर और एक्टुएटर्स का उपयोग करके प्रोग्राम करने के लिए, आपको एक एडिटर इंस्टॉल करना होगा ताकि आप डिवाइस कोड लिख सकें, और विभिन्न लाइब्रेरी और टूल्स इंस्टॉल कर सकें जो Grove हार्डवेयर के साथ इंटरैक्ट करते हैं। + +1. जब आपका पाई रीबूट हो जाए, तो टर्मिनल लॉन्च करें। इसे **टर्मिनल** आइकन पर क्लिक करके या *मेनू -> एक्सेसरीज़ -> टर्मिनल* चुनकर खोलें। + +1. यह सुनिश्चित करने के लिए कि OS और इंस्टॉल किए गए सॉफ़्टवेयर अपडेट हैं, निम्नलिखित कमांड चलाएं: + + ```sh + sudo apt update && sudo apt full-upgrade --yes + ``` + +1. Grove हार्डवेयर के लिए आवश्यक सभी लाइब्रेरी इंस्टॉल करने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + sudo apt install git python3-dev python3-pip --yes + + git clone https://github.com/Seeed-Studio/grove.py + cd grove.py + sudo pip3 install . + + sudo raspi-config nonint do_i2c 0 + ``` + + यह Git और Python पैकेज इंस्टॉल करने के लिए Pip को इंस्टॉल करने से शुरू होता है। + + Python की एक शक्तिशाली विशेषता [Pip पैकेज](https://pypi.org) इंस्टॉल करने की क्षमता है - ये इंटरनेट पर प्रकाशित अन्य लोगों द्वारा लिखे गए कोड के पैकेज हैं। आप एक कमांड के साथ अपने कंप्यूटर पर Pip पैकेज इंस्टॉल कर सकते हैं और फिर उस पैकेज का उपयोग अपने कोड में कर सकते हैं। + + Seeed Grove Python पैकेज को स्रोत से इंस्टॉल करने की आवश्यकता होती है। ये कमांड उस पैकेज के स्रोत कोड को क्लोन करेंगे और फिर इसे लोकली इंस्टॉल करेंगे। + + > 💁 डिफ़ॉल्ट रूप से जब आप कोई पैकेज इंस्टॉल करते हैं, तो वह आपके कंप्यूटर पर हर जगह उपलब्ध होता है, और यह पैकेज संस्करणों के साथ समस्याएं पैदा कर सकता है - जैसे कि एक एप्लिकेशन एक पैकेज के एक संस्करण पर निर्भर करता है जो दूसरे एप्लिकेशन के लिए एक नया संस्करण इंस्टॉल करने पर टूट जाता है। इस समस्या को हल करने के लिए, आप [Python वर्चुअल एनवायरनमेंट](https://docs.python.org/3/library/venv.html) का उपयोग कर सकते हैं, जो कि एक समर्पित फ़ोल्डर में Python की एक कॉपी है, और जब आप Pip पैकेज इंस्टॉल करते हैं तो वे केवल उस फ़ोल्डर में इंस्टॉल होते हैं। पाई का उपयोग करते समय आप वर्चुअल एनवायरनमेंट का उपयोग नहीं करेंगे। Grove इंस्टॉल स्क्रिप्ट Grove Python पैकेज को ग्लोबली इंस्टॉल करती है, इसलिए वर्चुअल एनवायरनमेंट का उपयोग करने के लिए आपको वर्चुअल एनवायरनमेंट सेटअप करना होगा और फिर मैन्युअल रूप से Grove पैकेज को उस एनवायरनमेंट के अंदर पुनः इंस्टॉल करना होगा। ग्लोबल पैकेज का उपयोग करना आसान है, खासकर क्योंकि कई पाई डेवलपर्स प्रत्येक प्रोजेक्ट के लिए एक साफ़ SD कार्ड को फिर से फ्लैश करते हैं। + + अंत में, यह I2C इंटरफ़ेस को सक्षम करता है। + +1. पाई को रीबूट करें, या तो मेनू का उपयोग करके या टर्मिनल में निम्नलिखित कमांड चलाकर: + + ```sh + sudo reboot + ``` + +1. जब पाई रीबूट हो जाए, तो टर्मिनल को फिर से लॉन्च करें और निम्नलिखित कमांड चलाएं ताकि [Visual Studio Code (VS Code)](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) इंस्टॉल हो सके - यह वह एडिटर है जिसे आप Python में डिवाइस कोड लिखने के लिए उपयोग करेंगे। + + ```sh + sudo apt install code + ``` + + जब यह इंस्टॉल हो जाए, तो VS Code टॉप मेनू से उपलब्ध होगा। + + > 💁 आप इन पाठों के लिए किसी भी Python IDE या एडिटर का उपयोग कर सकते हैं यदि आपके पास कोई पसंदीदा टूल है, लेकिन पाठ VS Code का उपयोग करने के निर्देश देंगे। + +1. Pylance इंस्टॉल करें। यह VS Code के लिए एक एक्सटेंशन है जो Python भाषा समर्थन प्रदान करता है। [Pylance एक्सटेंशन दस्तावेज़](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) में दिए गए निर्देशों का पालन करके इस एक्सटेंशन को VS Code में इंस्टॉल करें। + +### पाई को कोड करने के लिए रिमोट एक्सेस + +पाई पर सीधे कोडिंग करने के बजाय, इसे 'हेडलैस' चलाया जा सकता है, यानी कीबोर्ड/माउस/मॉनिटर से कनेक्ट नहीं किया गया है, और इसे आपके कंप्यूटर से कॉन्फ़िगर और कोड किया जा सकता है, Visual Studio Code का उपयोग करके। + +#### पाई OS सेटअप करें + +रिमोट कोडिंग के लिए, पाई OS को SD कार्ड पर इंस्टॉल करने की आवश्यकता होती है। + +##### कार्य - पाई OS सेटअप करें + +हेडलैस पाई OS सेटअप करें। + +1. [रास्पबेरी पाई OS सॉफ़्टवेयर पेज](https://www.raspberrypi.org/software/) से **रास्पबेरी पाई इमेजर** डाउनलोड करें और इसे इंस्टॉल करें। + +1. SD कार्ड को अपने कंप्यूटर में डालें, यदि आवश्यक हो तो एडॉप्टर का उपयोग करें। + +1. रास्पबेरी पाई इमेजर लॉन्च करें। + +1. रास्पबेरी पाई इमेजर से **CHOOSE OS** बटन चुनें, फिर *Raspberry Pi OS (Other)* और उसके बाद *Raspberry Pi OS Lite (32-bit)* चुनें। + + ![रास्पबेरी पाई इमेजर में Raspberry Pi OS Lite चयनित](../../../../../translated_images/raspberry-pi-imager.24aedeab9e233d841a1504ed7cfeb871b1f8e1134cfcd8370e7f60a092056be2.hi.png) + + > 💁 Raspberry Pi OS Lite रास्पबेरी पाई OS का एक संस्करण है जिसमें डेस्कटॉप UI या UI आधारित टूल्स नहीं होते हैं। ये हेडलैस पाई के लिए आवश्यक नहीं हैं और इंस्टॉल को छोटा और बूट अप समय को तेज बनाते हैं। + +1. **CHOOSE STORAGE** बटन चुनें, फिर अपने SD कार्ड को चुनें। + +1. **Advanced Options** लॉन्च करें, `Ctrl+Shift+X` दबाकर। ये विकल्प रास्पबेरी पाई OS को SD कार्ड पर इमेज करने से पहले कुछ प्री-कॉन्फ़िगरेशन की अनुमति देते हैं। + + 1. **Enable SSH** चेक बॉक्स को चेक करें और `pi` उपयोगकर्ता के लिए पासवर्ड सेट करें। यह वह पासवर्ड है जिसका उपयोग आप बाद में पाई में लॉग इन करने के लिए करेंगे। + + 1. यदि आप पाई को वाईफाई के माध्यम से कनेक्ट करने की योजना बना रहे हैं, तो **Configure WiFi** चेक बॉक्स को चेक करें और अपना वाईफाई SSID और पासवर्ड दर्ज करें, साथ ही अपना वाईफाई देश चुनें। यदि आप ईथरनेट केबल का उपयोग करेंगे तो आपको यह करने की आवश्यकता नहीं है। सुनिश्चित करें कि आप जिस नेटवर्क से कनेक्ट करते हैं वह वही है जिस पर आपका कंप्यूटर है। + + 1. **Set locale settings** चेक बॉक्स को चेक करें और अपना देश और टाइमज़ोन सेट करें। + + 1. **SAVE** बटन चुनें। + +1. **WRITE** बटन चुनें ताकि OS SD कार्ड पर लिखा जा सके। यदि आप macOS का उपयोग कर रहे हैं, तो आपसे पासवर्ड पूछा जाएगा क्योंकि डिस्क इमेज लिखने वाला टूल विशेषाधिकार प्राप्त एक्सेस की आवश्यकता रखता है। + +OS SD कार्ड पर लिखा जाएगा, और पूरा होने पर कार्ड को OS द्वारा इजेक्ट कर दिया जाएगा, और आपको सूचित किया जाएगा। SD कार्ड को अपने कंप्यूटर से निकालें, इसे पाई में डालें, पाई को पावर दें और इसे ठीक से बूट होने के लिए लगभग 2 मिनट तक प्रतीक्षा करें। + +#### पाई से कनेक्ट करें + +अगला कदम पाई तक रिमोट एक्सेस प्राप्त करना है। आप इसे `ssh` का उपयोग करके कर सकते हैं, जो macOS, Linux और Windows के हाल के संस्करणों पर उपलब्ध है। + +##### कार्य - पाई से कनेक्ट करें + +पाई तक रिमोट एक्सेस प्राप्त करें। + +1. टर्मिनल या कमांड प्रॉम्प्ट लॉन्च करें, और पाई से कनेक्ट करने के लिए निम्नलिखित कमांड दर्ज करें: + + ```sh + ssh pi@raspberrypi.local + ``` + + यदि आप Windows पर हैं और पुराने संस्करण का उपयोग कर रहे हैं जिसमें `ssh` इंस्टॉल नहीं है, तो आप OpenSSH का उपयोग कर सकते हैं। [OpenSSH इंस्टॉलेशन दस्तावेज़](https://docs.microsoft.com//windows-server/administration/openssh/openssh_install_firstuse?WT.mc_id=academic-17441-jabenn) में इंस्टॉलेशन निर्देश पाए जा सकते हैं। + +1. यह आपको पाई से कनेक्ट करना चाहिए और पासवर्ड पूछना चाहिए। + + `.local` का उपयोग करके अपने नेटवर्क पर कंप्यूटर खोजने में सक्षम होना Linux और Windows में एक अपेक्षाकृत हालिया जोड़ है। यदि आप Linux या Windows का उपयोग कर रहे हैं और आपको होस्टनेम न मिलने के बारे में कोई त्रुटि मिलती है, तो आपको ZeroConf नेटवर्किंग (Apple द्वारा Bonjour के रूप में संदर्भित) को सक्षम करने के लिए अतिरिक्त सॉफ़्टवेयर इंस्टॉल करना होगा: + + 1. यदि आप Linux का उपयोग कर रहे हैं, तो निम्नलिखित कमांड का उपयोग करके Avahi इंस्टॉल करें: + + ```sh + sudo apt-get install avahi-daemon + ``` + + 1. यदि आप Windows का उपयोग कर रहे हैं, तो ZeroConf को सक्षम करने का सबसे आसान तरीका [Bonjour Print Services for Windows](http://support.apple.com/kb/DL999) इंस्टॉल करना है। आप [iTunes for Windows](https://www.apple.com/itunes/download/) भी इंस्टॉल कर सकते हैं ताकि उपयोगिता का नया संस्करण प्राप्त किया जा सके (जो स्टैंडअलोन उपलब्ध नहीं है)। + + > 💁 यदि आप `raspberrypi.local` का उपयोग करके कनेक्ट नहीं कर सकते हैं, तो आप पाई का IP पता उपयोग कर सकते हैं। [रास्पबेरी पाई IP पता दस्तावेज़](https://www.raspberrypi.org/documentation/remote-access/ip-address.md) में IP पता प्राप्त करने के कई तरीकों के निर्देश दिए गए हैं। + +1. वह पासवर्ड दर्ज करें जिसे आपने रास्पबेरी पाई इमेजर एडवांस्ड ऑप्शंस में सेट किया था। + +#### पाई पर सॉफ़्टवेयर कॉन्फ़िगर करें + +एक बार जब आप पाई से कनेक्ट हो जाएं, तो आपको यह सुनिश्चित करना होगा कि OS अपडेट है, और Grove हार्डवेयर के साथ इंटरैक्ट करने के लिए विभिन्न लाइब्रेरी और टूल्स इंस्टॉल करें। + +##### कार्य - पाई पर सॉफ़्टवेयर कॉन्फ़िगर करें + +इंस्टॉल किए गए पाई सॉफ़्टवेयर को कॉन्फ़िगर करें और Grove लाइब्रेरी इंस्टॉल करें। + +1. अपने `ssh` सत्र से, पाई को अपडेट करने और फिर रीबूट करने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + sudo apt update && sudo apt full-upgrade --yes && sudo reboot + ``` + + पाई अपडेट हो जाएगा और रीबूट हो जाएगा। जब पाई रीबूट होता है, तो `ssh` सत्र समाप्त हो जाएगा, इसलिए इसे लगभग 30 सेकंड के लिए छोड़ दें और फिर से कनेक्ट करें। + +1. पुनः कनेक्ट किए गए `ssh` सत्र से, Grove हार्डवेयर के लिए आवश्यक सभी लाइब्रेरी इंस्टॉल करने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + sudo apt install git python3-dev python3-pip --yes + + git clone https://github.com/Seeed-Studio/grove.py + cd grove.py + sudo pip3 install . + + sudo raspi-config nonint do_i2c 0 + ``` + + यह Git और Python पैकेज इंस्टॉल करने के लिए Pip को इंस्टॉल करने से शुरू होता है। + + Python की एक शक्तिशाली विशेषता [Pip पैकेज](https://pypi.org) इंस्टॉल करने की क्षमता है - ये इंटरनेट पर प्रकाशित अन्य लोगों द्वारा लिखे गए कोड के पैकेज हैं। आप एक कमांड के साथ अपने कंप्यूटर पर Pip पैकेज इंस्टॉल कर सकते हैं और फिर उस पैकेज का उपयोग अपने कोड में कर सकते हैं। + + Seeed Grove Python पैकेज को स्रोत से इंस्टॉल करने की आवश्यकता होती है। ये कमांड उस पैकेज के स्रोत कोड को क्लोन करेंगे और फिर इसे लोकली इंस्टॉल करेंगे। + + > 💁 डिफ़ॉल्ट रूप से जब आप कोई पैकेज इंस्टॉल करते हैं, तो वह आपके कंप्यूटर पर हर जगह उपलब्ध होता है, और यह पैकेज संस्करणों के साथ समस्याएं पैदा कर सकता है - जैसे कि एक एप्लिकेशन एक पैकेज के एक संस्करण पर निर्भर करता है जो दूसरे एप्लिकेशन के लिए एक नया संस्करण इंस्टॉल करने पर टूट जाता है। इस समस्या को हल करने के लिए, आप [Python वर्चुअल एनवायरनमेंट](https://docs.python.org/3/library/venv.html) का उपयोग कर सकते हैं, जो कि एक समर्पित फ़ोल्डर में Python की एक कॉपी है, और जब आप Pip पैकेज इंस्टॉल करते हैं तो वे केवल उस फ़ोल्डर में इंस्टॉल होते हैं। पाई का उपयोग करते समय आप वर्चुअल एनवायरनमेंट का उपयोग नहीं करेंगे। Grove इंस्टॉल स्क्रिप्ट Grove Python पैकेज को ग्लोबली इंस्टॉल करती है, इसलिए वर्चुअल एनवायरनमेंट का उपयोग करने के लिए आपको वर्चुअल एनवायरनमेंट सेटअप करना होगा और फिर मैन्युअल रूप से Grove पैकेज को उस एनवायरनमेंट के अंदर पुनः इंस्टॉल करना होगा। ग्लोबल पैकेज का उपयोग करना आसान है, खासकर क्योंकि कई पाई डेवलपर्स प्रत्येक प्रोजेक्ट के लिए एक साफ़ SD कार्ड को फिर से फ्लैश करते हैं। + + अंत में, यह I2C इंटरफ़ेस को सक्षम करता है। + +1. निम्नलिखित कमांड चलाकर पाई को रीबूट करें: + + ```sh + sudo reboot + ``` + + जब पाई रीबूट होता है, तो `ssh` सत्र समाप्त हो जाएगा। फिर से कनेक्ट करने की आवश्यकता नहीं है। + +#### रिमोट एक्सेस के लिए VS Code कॉन्फ़िगर करें + +एक बार जब पाई कॉन्फ़िगर हो जाए, तो आप अपने कंप्यूटर से Visual Studio Code (VS Code) का उपयोग करके पाई से कनेक्ट कर सकते हैं - यह एक मुफ्त डेवलपर टेक्स्ट एडिटर है जिसे आप Python में डिवाइस कोड लिखने के लिए उपयोग करेंगे। + +##### कार्य - रिमोट एक्सेस के लिए VS Code कॉन्फ़िगर करें + +आवश्यक सॉफ़्टवेयर इंस्टॉल करें और अपने पाई से रिमोटली कनेक्ट करें। + +1. [VS Code दस्तावेज़](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) का पालन करके अपने कंप्यूटर पर VS Code इंस्टॉल करें। + +1. [VS Code रिमोट डेवलपमेंट SSH दस्तावेज़](https://code.visualstudio.com/docs/remote/ssh?WT.mc_id=academic-17441-jabenn) में दिए गए निर्देशों का पालन करके आवश्यक घटक इंस्टॉल करें। + +1. उन्हीं निर्देशों का पालन करते हुए, VS Code को पाई से कनेक्ट करें। + +1. एक बार कनेक्ट होने के बाद, [एक्सटेंशन प्रबंधन](https://code.visualstudio.com/docs/remote/ssh#_managing-extensions?WT.mc_id=academic-17441-jabenn) निर्देशों का पालन करके [Pylance एक्सटेंशन](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.v +नए प्रोग्रामिंग भाषा या तकनीक के साथ शुरुआत करते समय, एक 'Hello World' एप्लिकेशन बनाना पारंपरिक है - एक छोटा एप्लिकेशन जो कुछ ऐसा टेक्स्ट जैसे `"Hello World"` आउटपुट करता है, यह सुनिश्चित करने के लिए कि सभी टूल सही तरीके से कॉन्फ़िगर किए गए हैं। + +Pi के लिए Hello World ऐप यह सुनिश्चित करेगा कि आपके पास Python और Visual Studio Code सही तरीके से इंस्टॉल हैं। + +यह ऐप `nightlight` नामक एक फ़ोल्डर में होगा, और इसे इस असाइनमेंट के बाद के हिस्सों में अलग-अलग कोड के साथ पुनः उपयोग किया जाएगा ताकि nightlight एप्लिकेशन बनाया जा सके। + +### कार्य - Hello World + +Hello World ऐप बनाएं। + +1. VS Code लॉन्च करें, या तो सीधे Pi पर, या अपने कंप्यूटर पर और Remote SSH एक्सटेंशन का उपयोग करके Pi से कनेक्ट करें। + +1. VS Code टर्मिनल लॉन्च करें *Terminal -> New Terminal* चुनकर, या `` CTRL+` `` दबाकर। यह `pi` उपयोगकर्ता के होम डायरेक्टरी में खुलेगा। + +1. अपने कोड के लिए एक डायरेक्टरी बनाने और उस डायरेक्टरी के अंदर `app.py` नामक एक Python फ़ाइल बनाने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + mkdir nightlight + cd nightlight + touch app.py + ``` + +1. इस फ़ोल्डर को VS Code में खोलें *File -> Open...* चुनकर और *nightlight* फ़ोल्डर को चुनें, फिर **OK** पर क्लिक करें। + + ![VS Code ओपन डायलॉग जो nightlight फ़ोल्डर दिखा रहा है](../../../../../translated_images/vscode-open-nightlight-remote.d3d2a4011e30d535c4b70084f6e94bf6b5b1327fd8e77affe64465ac151ee766.hi.png) + +1. VS Code एक्सप्लोरर से `app.py` फ़ाइल खोलें और निम्नलिखित कोड जोड़ें: + + ```python + print('Hello World!') + ``` + + `print` फ़ंक्शन जो भी इसे पास किया जाता है उसे कंसोल में प्रिंट करता है। + +1. VS Code टर्मिनल से, अपने Python ऐप को चलाने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + python app.py + ``` + + > 💁 यदि आपके पास Python 2 के साथ-साथ Python 3 (नवीनतम संस्करण) इंस्टॉल है, तो आपको इस कोड को चलाने के लिए स्पष्ट रूप से `python3` कॉल करना पड़ सकता है। यदि आपके पास Python 2 इंस्टॉल है तो `python` कॉल करने पर Python 2 का उपयोग होगा बजाय Python 3 के। डिफ़ॉल्ट रूप से, नवीनतम Raspberry Pi OS संस्करणों में केवल Python 3 इंस्टॉल होता है। + + टर्मिनल में निम्नलिखित आउटपुट दिखाई देगा: + + ```output + pi@raspberrypi:~/nightlight $ python3 app.py + Hello World! + ``` + +> 💁 आप इस कोड को [code/pi](../../../../../1-getting-started/lessons/1-introduction-to-iot/code/pi) फ़ोल्डर में पा सकते हैं। + +😀 आपका 'Hello World' प्रोग्राम सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/1-introduction-to-iot/virtual-device.md b/translations/hi/1-getting-started/lessons/1-introduction-to-iot/virtual-device.md new file mode 100644 index 00000000..a7e1ebf1 --- /dev/null +++ b/translations/hi/1-getting-started/lessons/1-introduction-to-iot/virtual-device.md @@ -0,0 +1,243 @@ + +# वर्चुअल सिंगल-बोर्ड कंप्यूटर + +IoT डिवाइस, सेंसर और एक्टुएटर्स खरीदने के बजाय, आप अपने कंप्यूटर का उपयोग IoT हार्डवेयर को सिमुलेट करने के लिए कर सकते हैं। [CounterFit प्रोजेक्ट](https://github.com/CounterFit-IoT/CounterFit) आपको एक ऐप को लोकली चलाने की अनुमति देता है जो सेंसर और एक्टुएटर्स जैसे IoT हार्डवेयर को सिमुलेट करता है। आप लोकल Python कोड से इन सेंसर और एक्टुएटर्स तक पहुंच सकते हैं, ठीक उसी तरह जैसे आप फिजिकल हार्डवेयर का उपयोग करके Raspberry Pi पर कोड लिखते। + +## सेटअप + +CounterFit का उपयोग करने के लिए, आपको अपने कंप्यूटर पर कुछ मुफ्त सॉफ़्टवेयर इंस्टॉल करने की आवश्यकता होगी। + +### कार्य + +आवश्यक सॉफ़्टवेयर इंस्टॉल करें। + +1. Python इंस्टॉल करें। Python का नवीनतम संस्करण इंस्टॉल करने के निर्देशों के लिए [Python डाउनलोड पेज](https://www.python.org/downloads/) देखें। + +1. Visual Studio Code (VS Code) इंस्टॉल करें। यह वह एडिटर है जिसका उपयोग आप Python में वर्चुअल डिवाइस कोड लिखने के लिए करेंगे। VS Code इंस्टॉल करने के निर्देशों के लिए [VS Code डाक्यूमेंटेशन](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) देखें। + + > 💁 आप इन पाठों के लिए अपनी पसंदीदा टूल का उपयोग कर सकते हैं, लेकिन पाठों में VS Code का उपयोग करने के आधार पर निर्देश दिए जाएंगे। + +1. VS Code Pylance एक्सटेंशन इंस्टॉल करें। यह VS Code के लिए एक एक्सटेंशन है जो Python भाषा समर्थन प्रदान करता है। इस एक्सटेंशन को VS Code में इंस्टॉल करने के निर्देशों के लिए [Pylance एक्सटेंशन डाक्यूमेंटेशन](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) देखें। + +CounterFit ऐप को इंस्टॉल और कॉन्फ़िगर करने के निर्देश असाइनमेंट के प्रासंगिक समय पर दिए जाएंगे क्योंकि इसे प्रति-प्रोजेक्ट आधार पर इंस्टॉल किया जाता है। + +## हेलो वर्ल्ड + +किसी नई प्रोग्रामिंग भाषा या तकनीक के साथ शुरुआत करते समय 'Hello World' एप्लिकेशन बनाना पारंपरिक है - एक छोटा एप्लिकेशन जो `"Hello World"` जैसा टेक्स्ट आउटपुट करता है ताकि यह सुनिश्चित किया जा सके कि सभी टूल सही तरीके से कॉन्फ़िगर किए गए हैं। + +वर्चुअल IoT हार्डवेयर के लिए Hello World ऐप यह सुनिश्चित करेगा कि आपने Python और Visual Studio Code सही तरीके से इंस्टॉल किया है। यह CounterFit से वर्चुअल IoT सेंसर और एक्टुएटर्स के लिए कनेक्ट करेगा। यह किसी हार्डवेयर का उपयोग नहीं करेगा, केवल यह साबित करने के लिए कनेक्ट करेगा कि सब कुछ काम कर रहा है। + +यह ऐप `nightlight` नामक एक फ़ोल्डर में होगा, और इसे इस असाइनमेंट के बाद के भागों में नाइटलाइट एप्लिकेशन बनाने के लिए अलग-अलग कोड के साथ पुनः उपयोग किया जाएगा। + +### Python वर्चुअल एनवायरनमेंट कॉन्फ़िगर करें + +Python की एक शक्तिशाली विशेषता [Pip पैकेज](https://pypi.org) इंस्टॉल करने की क्षमता है - ये अन्य लोगों द्वारा लिखे गए कोड के पैकेज हैं जो इंटरनेट पर प्रकाशित किए गए हैं। आप एक कमांड के साथ अपने कंप्यूटर पर Pip पैकेज इंस्टॉल कर सकते हैं, फिर उस पैकेज का उपयोग अपने कोड में कर सकते हैं। आप CounterFit से बात करने के लिए एक पैकेज इंस्टॉल करने के लिए Pip का उपयोग करेंगे। + +डिफ़ॉल्ट रूप से जब आप एक पैकेज इंस्टॉल करते हैं तो यह आपके कंप्यूटर पर हर जगह उपलब्ध होता है, और यह पैकेज संस्करणों के साथ समस्याओं का कारण बन सकता है - जैसे कि एक एप्लिकेशन एक पैकेज के एक संस्करण पर निर्भर करता है जो तब टूट जाता है जब आप किसी अन्य एप्लिकेशन के लिए एक नया संस्करण इंस्टॉल करते हैं। इस समस्या को हल करने के लिए, आप [Python वर्चुअल एनवायरनमेंट](https://docs.python.org/3/library/venv.html) का उपयोग कर सकते हैं, जो मूल रूप से एक समर्पित फ़ोल्डर में Python की एक प्रति है। जब आप Pip पैकेज इंस्टॉल करते हैं तो वे केवल उस फ़ोल्डर में इंस्टॉल होते हैं। + +> 💁 यदि आप Raspberry Pi का उपयोग कर रहे हैं तो आपने उस डिवाइस पर Pip पैकेज प्रबंधित करने के लिए वर्चुअल एनवायरनमेंट सेटअप नहीं किया है। इसके बजाय आप ग्लोबल पैकेज का उपयोग कर रहे हैं, क्योंकि Grove पैकेज इंस्टॉलर स्क्रिप्ट द्वारा ग्लोबल रूप से इंस्टॉल किए गए हैं। + +#### कार्य - Python वर्चुअल एनवायरनमेंट कॉन्फ़िगर करें + +Python वर्चुअल एनवायरनमेंट कॉन्फ़िगर करें और CounterFit के लिए Pip पैकेज इंस्टॉल करें। + +1. अपने टर्मिनल या कमांड लाइन से, एक नई डायरेक्टरी बनाने और उसमें नेविगेट करने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + mkdir nightlight + cd nightlight + ``` + +1. अब `.venv` फ़ोल्डर में वर्चुअल एनवायरनमेंट बनाने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + python3 -m venv .venv + ``` + + > 💁 आपको वर्चुअल एनवायरनमेंट बनाने के लिए स्पष्ट रूप से `python3` कॉल करना होगा, ताकि यह सुनिश्चित हो सके कि आपके पास Python 2 के साथ-साथ Python 3 (नवीनतम संस्करण) इंस्टॉल है। यदि आपके पास Python 2 इंस्टॉल है तो `python` कॉल करने पर Python 2 का उपयोग होगा बजाय Python 3 के। + +1. वर्चुअल एनवायरनमेंट को सक्रिय करें: + + * Windows पर: + * यदि आप Command Prompt या Windows Terminal के माध्यम से Command Prompt का उपयोग कर रहे हैं, तो निम्नलिखित चलाएं: + + ```cmd + .venv\Scripts\activate.bat + ``` + + * यदि आप PowerShell का उपयोग कर रहे हैं, तो निम्नलिखित चलाएं: + + ```powershell + .\.venv\Scripts\Activate.ps1 + ``` + + > यदि आपको इस सिस्टम पर स्क्रिप्ट चलाने के लिए अक्षम होने के बारे में कोई त्रुटि मिलती है, तो आपको उपयुक्त निष्पादन नीति सेट करके स्क्रिप्ट चलाने को सक्षम करना होगा। आप इसे PowerShell को एडमिनिस्ट्रेटर के रूप में लॉन्च करके और निम्नलिखित कमांड चलाकर कर सकते हैं: + + ```powershell + Set-ExecutionPolicy -ExecutionPolicy Unrestricted + ``` + + पुष्टि करने के लिए `Y` दर्ज करें। फिर PowerShell को पुनः लॉन्च करें और पुनः प्रयास करें। + + यदि आवश्यक हो तो आप बाद में इस निष्पादन नीति को रीसेट कर सकते हैं। आप Microsoft Docs पर [Execution Policies पेज](https://docs.microsoft.com/powershell/module/microsoft.powershell.core/about/about_execution_policies?WT.mc_id=academic-17441-jabenn) में इसके बारे में अधिक पढ़ सकते हैं। + + * macOS या Linux पर, निम्नलिखित चलाएं: + + ```cmd + source ./.venv/bin/activate + ``` + + > 💁 ये कमांड उसी स्थान से चलाए जाने चाहिए जहां आपने वर्चुअल एनवायरनमेंट बनाने का कमांड चलाया था। आपको `.venv` फ़ोल्डर में नेविगेट करने की आवश्यकता नहीं होगी। आपको हमेशा सक्रिय कमांड और पैकेज इंस्टॉल करने या कोड चलाने के लिए उसी फ़ोल्डर से कमांड चलानी चाहिए जहां आपने वर्चुअल एनवायरनमेंट बनाया था। + +1. एक बार वर्चुअल एनवायरनमेंट सक्रिय हो जाने के बाद, डिफ़ॉल्ट `python` कमांड उस संस्करण को चलाएगा जिसका उपयोग वर्चुअल एनवायरनमेंट बनाने के लिए किया गया था। संस्करण प्राप्त करने के लिए निम्नलिखित चलाएं: + + ```sh + python --version + ``` + + आउटपुट में निम्नलिखित शामिल होना चाहिए: + + ```output + (.venv) ➜ nightlight python --version + Python 3.9.1 + ``` + + > 💁 आपका Python संस्करण अलग हो सकता है - जब तक यह संस्करण 3.6 या उच्चतर है, आप ठीक हैं। यदि नहीं, तो इस फ़ोल्डर को हटा दें, Python का नया संस्करण इंस्टॉल करें और पुनः प्रयास करें। + +1. CounterFit के लिए Pip पैकेज इंस्टॉल करने के लिए निम्नलिखित कमांड चलाएं। इन पैकेजों में मुख्य CounterFit ऐप और Grove हार्डवेयर के लिए शिम्स शामिल हैं। ये शिम्स आपको ऐसा कोड लिखने की अनुमति देते हैं जैसे आप Grove इकोसिस्टम के फिजिकल सेंसर और एक्टुएटर्स का उपयोग करके प्रोग्रामिंग कर रहे हों, लेकिन वर्चुअल IoT डिवाइस से जुड़े हों। + + ```sh + pip install CounterFit + pip install counterfit-connection + pip install counterfit-shims-grove + ``` + + ये Pip पैकेज केवल वर्चुअल एनवायरनमेंट में इंस्टॉल किए जाएंगे और इसके बाहर उपलब्ध नहीं होंगे। + +### कोड लिखें + +एक बार Python वर्चुअल एनवायरनमेंट तैयार हो जाने के बाद, आप 'Hello World' एप्लिकेशन के लिए कोड लिख सकते हैं। + +#### कार्य - कोड लिखें + +कंसोल में `"Hello World"` प्रिंट करने के लिए एक Python एप्लिकेशन बनाएं। + +1. वर्चुअल एनवायरनमेंट के अंदर, एक Python फ़ाइल `app.py` बनाने के लिए निम्नलिखित चलाएं: + + * Windows पर: + + ```cmd + type nul > app.py + ``` + + * macOS या Linux पर: + + ```cmd + touch app.py + ``` + +1. वर्तमान फ़ोल्डर को VS Code में खोलें: + + ```sh + code . + ``` + + > 💁 यदि आपका टर्मिनल macOS पर `command not found` लौटाता है, तो इसका मतलब है कि VS Code को आपके PATH में नहीं जोड़ा गया है। आप [VS Code डाक्यूमेंटेशन](https://code.visualstudio.com/docs/setup/mac?WT.mc_id=academic-17441-jabenn#_launching-from-the-command-line) के "Launching from the command line" सेक्शन में दिए गए निर्देशों का पालन करके VS Code को अपने PATH में जोड़ सकते हैं और फिर कमांड चला सकते हैं। Windows और Linux पर VS Code डिफ़ॉल्ट रूप से आपके PATH में इंस्टॉल होता है। + +1. जब VS Code लॉन्च होता है, तो यह Python वर्चुअल एनवायरनमेंट को सक्रिय करेगा। चयनित वर्चुअल एनवायरनमेंट नीचे की स्टेटस बार में दिखाई देगा: + + ![VS Code में चयनित वर्चुअल एनवायरनमेंट दिखा रहा है](../../../../../translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.hi.png) + +1. यदि VS Code टर्मिनल पहले से चल रहा है जब VS Code शुरू होता है, तो इसमें वर्चुअल एनवायरनमेंट सक्रिय नहीं होगा। सबसे आसान तरीका है टर्मिनल को **Kill the active terminal instance** बटन का उपयोग करके बंद करना: + + ![VS Code Kill the active terminal instance बटन](../../../../../translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.hi.png) + + आप यह बता सकते हैं कि टर्मिनल में वर्चुअल एनवायरनमेंट सक्रिय है क्योंकि टर्मिनल प्रॉम्प्ट पर वर्चुअल एनवायरनमेंट का नाम एक प्रीफिक्स होगा। उदाहरण के लिए, यह हो सकता है: + + ```sh + (.venv) ➜ nightlight + ``` + + यदि आपके प्रॉम्प्ट पर `.venv` प्रीफिक्स नहीं है, तो टर्मिनल में वर्चुअल एनवायरनमेंट सक्रिय नहीं है। + +1. *Terminal -> New Terminal* चुनकर या `` CTRL+` `` दबाकर एक नया VS Code टर्मिनल लॉन्च करें। नया टर्मिनल वर्चुअल एनवायरनमेंट लोड करेगा, और इसे सक्रिय करने के लिए कॉल टर्मिनल में दिखाई देगा। प्रॉम्प्ट में वर्चुअल एनवायरनमेंट का नाम (`.venv`) होगा: + + ```output + ➜ nightlight source .venv/bin/activate + (.venv) ➜ nightlight + ``` + +1. VS Code एक्सप्लोरर से `app.py` फ़ाइल खोलें और निम्नलिखित कोड जोड़ें: + + ```python + print('Hello World!') + ``` + + `print` फ़ंक्शन जो भी इसे पास किया जाता है उसे कंसोल में प्रिंट करता है। + +1. VS Code टर्मिनल से, अपने Python ऐप को चलाने के लिए निम्नलिखित चलाएं: + + ```sh + python app.py + ``` + + आउटपुट में निम्नलिखित होगा: + + ```output + (.venv) ➜ nightlight python app.py + Hello World! + ``` + +😀 आपका 'Hello World' प्रोग्राम सफल रहा! + +### 'हार्डवेयर' कनेक्ट करें + +दूसरे 'Hello World' चरण के रूप में, आप CounterFit ऐप चलाएंगे और अपने कोड को इससे कनेक्ट करेंगे। यह IoT हार्डवेयर को किसी डेव किट में प्लग इन करने के वर्चुअल समकक्ष है। + +#### कार्य - 'हार्डवेयर' कनेक्ट करें + +1. VS Code टर्मिनल से, निम्नलिखित कमांड के साथ CounterFit ऐप लॉन्च करें: + + ```sh + counterfit + ``` + + ऐप चलना शुरू करेगा और आपके वेब ब्राउज़र में खुलेगा: + + ![ब्राउज़र में चल रहा Counter Fit ऐप](../../../../../translated_images/counterfit-first-run.433326358b669b31d0e99c3513cb01bfbb13724d162c99cdcc8f51ecf5f9c779.hi.png) + + इसे *Disconnected* के रूप में चिह्नित किया जाएगा, और शीर्ष-दाएं कोने में LED बंद होगा। + +1. `app.py` के शीर्ष पर निम्नलिखित कोड जोड़ें: + + ```python + from counterfit_connection import CounterFitConnection + CounterFitConnection.init('127.0.0.1', 5000) + ``` + + यह कोड `counterfit_connection` मॉड्यूल से `CounterFitConnection` क्लास को इंपोर्ट करता है, जो पहले इंस्टॉल किए गए `counterfit-connection` Pip पैकेज से आता है। फिर यह `127.0.0.1` पर चल रहे CounterFit ऐप से कनेक्शन को इनिशियलाइज़ करता है, जो आपके लोकल कंप्यूटर (अक्सर *localhost* कहा जाता है) तक पहुंचने के लिए हमेशा उपयोग किया जा सकता है, पोर्ट 5000 पर। + + > 💁 यदि आपके पास पोर्ट 5000 पर अन्य ऐप्स चल रहे हैं, तो आप कोड में पोर्ट को अपडेट करके इसे बदल सकते हैं, और CounterFit को `CounterFit --port ` चलाकर लॉन्च कर सकते हैं, `` को उस पोर्ट से बदलें जिसे आप उपयोग करना चाहते हैं। + +1. आपको **Create a new integrated terminal** बटन चुनकर एक नया VS Code टर्मिनल लॉन्च करना होगा। ऐसा इसलिए है क्योंकि वर्तमान टर्मिनल में CounterFit ऐप चल रहा है। + + ![VS Code Create a new integrated terminal बटन](../../../../../translated_images/vscode-new-terminal.77db8fc0f9cd31824b0e49a201beafe4ae4616d6c7339992cb2819e789b3eff9.hi.png) + +1. इस नए टर्मिनल में, पहले की तरह `app.py` फ़ाइल चलाएं। CounterFit की स्थिति **Connected** में बदल जाएगी और LED जल उठेगा। + + ![Counter Fit कनेक्टेड दिखा रहा है](../../../../../translated_images/counterfit-connected.ed30b46d8f79b0921f3fc70be10366e596a89dca3f80c2224a9d9fc98fccf884.hi.png) + +> 💁 आप इस कोड को [code/virtual-device](../../../../../1-getting-started/lessons/1-introduction-to-iot/code/virtual-device) फ़ोल्डर में पा सकते हैं। + +😀 आपका हार्डवेयर से कनेक्शन सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md b/translations/hi/1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md new file mode 100644 index 00000000..b6b5cc18 --- /dev/null +++ b/translations/hi/1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md @@ -0,0 +1,220 @@ + +# वियो टर्मिनल + +[सीड स्टूडियोज का वियो टर्मिनल](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) एक Arduino-संगत माइक्रोकंट्रोलर है, जिसमें वाईफाई और कुछ सेंसर और एक्ट्यूएटर्स पहले से ही शामिल हैं। इसके अलावा, इसमें [Grove](https://www.seeedstudio.com/category/Grove-c-1003.html) नामक हार्डवेयर इकोसिस्टम का उपयोग करके और अधिक सेंसर और एक्ट्यूएटर्स जोड़ने के लिए पोर्ट्स भी हैं। + +![सीड स्टूडियोज वियो टर्मिनल](../../../../../translated_images/wio-terminal.b8299ee16587db9aa9e05fabf9721bccd9eb8fb541b7c1a8267241282d81b603.hi.png) + +## सेटअप + +अपने वियो टर्मिनल का उपयोग करने के लिए, आपको अपने कंप्यूटर पर कुछ मुफ्त सॉफ़्टवेयर इंस्टॉल करने की आवश्यकता होगी। इसके अलावा, वाईफाई से कनेक्ट करने से पहले आपको वियो टर्मिनल का फर्मवेयर अपडेट करना होगा। + +### कार्य - सेटअप + +आवश्यक सॉफ़्टवेयर इंस्टॉल करें और फर्मवेयर अपडेट करें। + +1. **विजुअल स्टूडियो कोड (VS Code) इंस्टॉल करें।** यह वह एडिटर है जिसका उपयोग आप C/C++ में डिवाइस कोड लिखने के लिए करेंगे। VS Code इंस्टॉल करने के निर्देशों के लिए [VS Code डाक्यूमेंटेशन](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) देखें। + + > 💁 Arduino विकास के लिए एक और लोकप्रिय IDE [Arduino IDE](https://www.arduino.cc/en/software) है। यदि आप पहले से ही इस टूल से परिचित हैं, तो आप इसे VS Code और PlatformIO के बजाय उपयोग कर सकते हैं, लेकिन पाठों में VS Code का उपयोग करने के निर्देश दिए जाएंगे। + +1. **VS Code PlatformIO एक्सटेंशन इंस्टॉल करें।** यह VS Code के लिए एक एक्सटेंशन है जो C/C++ में माइक्रोकंट्रोलर प्रोग्रामिंग को सपोर्ट करता है। इस एक्सटेंशन को VS Code में इंस्टॉल करने के निर्देशों के लिए [PlatformIO एक्सटेंशन डाक्यूमेंटेशन](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=platformio.platformio-ide) देखें। यह एक्सटेंशन Microsoft C/C++ एक्सटेंशन पर निर्भर करता है, जो PlatformIO इंस्टॉल करते समय स्वचालित रूप से इंस्टॉल हो जाता है। + +1. **अपने वियो टर्मिनल को अपने कंप्यूटर से कनेक्ट करें।** वियो टर्मिनल के नीचे एक USB-C पोर्ट है, जिसे आपके कंप्यूटर के USB पोर्ट से कनेक्ट करना होगा। वियो टर्मिनल के साथ एक USB-C से USB-A केबल आता है, लेकिन यदि आपके कंप्यूटर में केवल USB-C पोर्ट हैं, तो आपको या तो एक USB-C केबल या USB-A से USB-C एडाप्टर की आवश्यकता होगी। + +1. **[वियो टर्मिनल विकी वाईफाई ओवरव्यू डाक्यूमेंटेशन](https://wiki.seeedstudio.com/Wio-Terminal-Network-Overview/)** में दिए गए निर्देशों का पालन करें और अपने वियो टर्मिनल को सेटअप करें और फर्मवेयर अपडेट करें। + +## हैलो वर्ल्ड + +किसी नई प्रोग्रामिंग भाषा या तकनीक के साथ शुरुआत करते समय, पारंपरिक रूप से एक 'हैलो वर्ल्ड' एप्लिकेशन बनाया जाता है - एक छोटा सा एप्लिकेशन जो `"Hello World"` जैसा टेक्स्ट आउटपुट करता है, यह सुनिश्चित करने के लिए कि सभी टूल सही तरीके से कॉन्फ़िगर किए गए हैं। + +वियो टर्मिनल के लिए हैलो वर्ल्ड ऐप यह सुनिश्चित करेगा कि आपने VS Code को सही तरीके से PlatformIO के साथ इंस्टॉल किया है और माइक्रोकंट्रोलर विकास के लिए सेटअप किया है। + +### PlatformIO प्रोजेक्ट बनाएं + +पहला कदम PlatformIO का उपयोग करके वियो टर्मिनल के लिए कॉन्फ़िगर किया गया एक नया प्रोजेक्ट बनाना है। + +#### कार्य - PlatformIO प्रोजेक्ट बनाएं + +PlatformIO प्रोजेक्ट बनाएं। + +1. वियो टर्मिनल को अपने कंप्यूटर से कनेक्ट करें। + +1. VS Code लॉन्च करें। + +1. साइड मेनू बार में PlatformIO आइकन होगा: + + ![Platform IO मेनू विकल्प](../../../../../translated_images/vscode-platformio-menu.297be26b9733e5c4635d9d8e636e93fed2015809eafb7cc8fd409c37b3ef2ef5.hi.png) + + इस मेनू आइटम को चुनें, फिर *PIO Home -> Open* चुनें। + + ![Platform IO ओपन विकल्प](../../../../../translated_images/vscode-platformio-home-open.3f9a41bfd3f4da1c866ec3e69f1675faa30b823b5b58ab58ac88e5df9a85da19.hi.png) + +1. वेलकम स्क्रीन से, **+ New Project** बटन चुनें। + + ![नया प्रोजेक्ट बटन](../../../../../translated_images/vscode-platformio-welcome-new-button.ba6fc8a4c7b78cc822e1ce47ba29c5db96668cce7c5f4adbfd2f1196422baa26.hi.png) + +1. *प्रोजेक्ट विज़ार्ड* में प्रोजेक्ट को कॉन्फ़िगर करें: + + 1. अपने प्रोजेक्ट का नाम `nightlight` रखें। + + 1. *Board* ड्रॉपडाउन से `WIO` टाइप करें ताकि बोर्ड्स को फिल्टर किया जा सके, और *Seeeduino Wio Terminal* चुनें। + + 1. *Framework* को *Arduino* पर छोड़ दें। + + 1. *Use default location* चेकबॉक्स को चेक्ड छोड़ दें, या इसे अनचेक करें और अपने प्रोजेक्ट के लिए एक लोकेशन चुनें। + + 1. **Finish** बटन चुनें। + + ![पूरा हुआ प्रोजेक्ट विज़ार्ड](../../../../../translated_images/vscode-platformio-nightlight-project-wizard.5c64db4da6037420827c2597507897233457210ee23975711fa2285efdcd0dc7.hi.png) + + PlatformIO वियो टर्मिनल के लिए कोड को कंपाइल करने के लिए आवश्यक घटकों को डाउनलोड करेगा और आपका प्रोजेक्ट बनाएगा। इसमें कुछ मिनट लग सकते हैं। + +### PlatformIO प्रोजेक्ट की जांच करें + +VS Code एक्सप्लोरर PlatformIO विज़ार्ड द्वारा बनाए गए कई फाइल्स और फोल्डर्स दिखाएगा। + +#### फोल्डर्स + +* `.pio` - यह फोल्डर PlatformIO द्वारा आवश्यक अस्थायी डेटा जैसे लाइब्रेरीज़ या कंपाइल कोड को रखता है। इसे डिलीट करने पर यह स्वचालित रूप से फिर से बन जाता है, और यदि आप अपना प्रोजेक्ट GitHub जैसी साइट्स पर साझा कर रहे हैं, तो इसे सोर्स कोड कंट्रोल में जोड़ने की आवश्यकता नहीं है। +* `.vscode` - यह फोल्डर PlatformIO और VS Code द्वारा उपयोग की जाने वाली कॉन्फ़िगरेशन को रखता है। इसे डिलीट करने पर यह स्वचालित रूप से फिर से बन जाता है, और इसे भी सोर्स कोड कंट्रोल में जोड़ने की आवश्यकता नहीं है। +* `include` - यह फोल्डर बाहरी हेडर फाइल्स के लिए है, जब आप अपने कोड में अतिरिक्त लाइब्रेरीज़ जोड़ते हैं। इन पाठों में आप इस फोल्डर का उपयोग नहीं करेंगे। +* `lib` - यह फोल्डर बाहरी लाइब्रेरीज़ के लिए है जिन्हें आप अपने कोड से कॉल करना चाहते हैं। इन पाठों में आप इस फोल्डर का उपयोग नहीं करेंगे। +* `src` - यह फोल्डर आपके एप्लिकेशन के मुख्य सोर्स कोड को रखता है। प्रारंभ में, इसमें केवल एक फाइल होगी - `main.cpp`। +* `test` - यह फोल्डर आपके कोड के लिए किसी भी यूनिट टेस्ट को रखने के लिए है। + +#### फाइल्स + +* `main.cpp` - `src` फोल्डर में यह फाइल आपके एप्लिकेशन के एंट्री पॉइंट को रखती है। इस फाइल को खोलें, और इसमें निम्नलिखित कोड होगा: + + ```cpp + #include + + void setup() { + // put your setup code here, to run once: + } + + void loop() { + // put your main code here, to run repeatedly: + } + ``` + + जब डिवाइस शुरू होता है, तो Arduino फ्रेमवर्क `setup` फंक्शन को एक बार चलाएगा, फिर `loop` फंक्शन को बार-बार चलाएगा जब तक कि डिवाइस बंद न हो जाए। + +* `.gitignore` - यह फाइल उन फाइल्स और डायरेक्टरीज़ को सूचीबद्ध करती है जिन्हें गिट सोर्स कोड कंट्रोल में जोड़ने से अनदेखा किया जाना चाहिए, जैसे कि GitHub पर एक रिपॉजिटरी में अपलोड करना। + +* `platformio.ini` - यह फाइल आपके डिवाइस और ऐप के लिए कॉन्फ़िगरेशन को रखती है। इस फाइल को खोलें, और इसमें निम्नलिखित कोड होगा: + + ```ini + [env:seeed_wio_terminal] + platform = atmelsam + board = seeed_wio_terminal + framework = arduino + ``` + + `[env:seeed_wio_terminal]` सेक्शन वियो टर्मिनल के लिए कॉन्फ़िगरेशन रखता है। आप कई `env` सेक्शन रख सकते हैं ताकि आपका कोड कई बोर्ड्स के लिए कंपाइल हो सके। + + अन्य मान प्रोजेक्ट विज़ार्ड की कॉन्फ़िगरेशन से मेल खाते हैं: + + * `platform = atmelsam` वियो टर्मिनल द्वारा उपयोग किए जाने वाले हार्डवेयर को परिभाषित करता है (ATSAMD51-आधारित माइक्रोकंट्रोलर)। + * `board = seeed_wio_terminal` माइक्रोकंट्रोलर बोर्ड के प्रकार को परिभाषित करता है (वियो टर्मिनल)। + * `framework = arduino` परिभाषित करता है कि यह प्रोजेक्ट Arduino फ्रेमवर्क का उपयोग कर रहा है। + +### हैलो वर्ल्ड ऐप लिखें + +अब आप हैलो वर्ल्ड ऐप लिखने के लिए तैयार हैं। + +#### कार्य - हैलो वर्ल्ड ऐप लिखें + +हैलो वर्ल्ड ऐप लिखें। + +1. VS Code में `main.cpp` फाइल खोलें। + +1. कोड को निम्नलिखित से बदलें: + + ```cpp + #include + + void setup() + { + Serial.begin(9600); + + while (!Serial) + ; // Wait for Serial to be ready + + delay(1000); + } + + void loop() + { + Serial.println("Hello World"); + delay(5000); + } + ``` + + `setup` फंक्शन सीरियल पोर्ट से कनेक्शन को इनिशियलाइज़ करता है - इस मामले में, USB पोर्ट जो वियो टर्मिनल को आपके कंप्यूटर से कनेक्ट करने के लिए उपयोग किया जाता है। पैरामीटर `9600` [बॉड रेट](https://wikipedia.org/wiki/Symbol_rate) (जिसे सिंबल रेट भी कहा जाता है) या गति है, जिस पर डेटा सीरियल पोर्ट पर प्रति सेकंड बिट्स में भेजा जाएगा। यह सेटिंग प्रति सेकंड 9,600 बिट्स (0s और 1s) डेटा भेजने का मतलब है। इसके बाद यह सीरियल पोर्ट के तैयार होने का इंतजार करता है। + + `loop` फंक्शन सीरियल पोर्ट पर `Hello World!` लाइन भेजता है, यानी `Hello World!` के अक्षर और एक नई लाइन कैरेक्टर। इसके बाद यह 5,000 मिलीसेकंड या 5 सेकंड के लिए सोता है। `loop` समाप्त होने के बाद, इसे फिर से चलाया जाता है, और यह तब तक चलता रहता है जब तक माइक्रोकंट्रोलर चालू रहता है। + +1. अपने वियो टर्मिनल को अपलोड मोड में डालें। आपको हर बार डिवाइस पर नया कोड अपलोड करते समय ऐसा करना होगा: + + 1. पावर स्विच को जल्दी से दो बार नीचे खींचें - यह हर बार ऑन पोजीशन पर वापस आ जाएगा। + + 1. USB पोर्ट के दाईं ओर नीली स्टेटस LED की जांच करें। यह पल्सिंग होनी चाहिए। + + [![वियो टर्मिनल को अपलोड मोड में डालने का वीडियो](https://img.youtube.com/vi/LeKU_7zLRrQ/0.jpg)](https://youtu.be/LeKU_7zLRrQ) + + इसे करने का तरीका दिखाने के लिए ऊपर दी गई छवि पर क्लिक करें। + +1. कोड को वियो टर्मिनल पर बिल्ड और अपलोड करें: + + 1. VS Code कमांड पैलेट खोलें। + + 1. `PlatformIO Upload` टाइप करें ताकि अपलोड विकल्प खोजा जा सके, और *PlatformIO: Upload* चुनें। + + ![कमांड पैलेट में PlatformIO अपलोड विकल्प](../../../../../translated_images/vscode-platformio-upload-command-palette.9e0f49cf80d1f1c3eb5c6689b8705ad8b89f0374b21698e996fec11e4ed09347.hi.png) + + PlatformIO आवश्यकता होने पर कोड को स्वचालित रूप से बिल्ड करेगा और फिर अपलोड करेगा। + + 1. कोड को कंपाइल किया जाएगा और वियो टर्मिनल पर अपलोड किया जाएगा। + + > 💁 यदि आप macOS का उपयोग कर रहे हैं, तो *DISK NOT EJECTED PROPERLY* के बारे में एक नोटिफिकेशन दिखाई देगा। ऐसा इसलिए है क्योंकि वियो टर्मिनल फ्लैशिंग प्रक्रिया के हिस्से के रूप में एक ड्राइव के रूप में माउंट हो जाता है, और जब कंपाइल कोड डिवाइस पर लिखा जाता है तो यह डिस्कनेक्ट हो जाता है। आप इस नोटिफिकेशन को अनदेखा कर सकते हैं। + + ⚠️ यदि आपको अपलोड पोर्ट उपलब्ध न होने के बारे में त्रुटियां मिलती हैं, तो पहले सुनिश्चित करें कि आपने वियो टर्मिनल को अपने कंप्यूटर से कनेक्ट किया है, और स्क्रीन के बाईं ओर स्विच का उपयोग करके इसे चालू किया है, और अपलोड मोड में सेट किया है। नीचे की हरी लाइट चालू होनी चाहिए, और नीली लाइट पल्सिंग होनी चाहिए। यदि आपको अभी भी त्रुटि मिलती है, तो वियो टर्मिनल को अपलोड मोड में मजबूर करने के लिए स्विच को जल्दी से दो बार नीचे खींचें और फिर से अपलोड करने का प्रयास करें। + +PlatformIO में एक सीरियल मॉनिटर है जो वियो टर्मिनल से USB केबल के माध्यम से भेजे गए डेटा की निगरानी कर सकता है। यह `Serial.println("Hello World");` कमांड द्वारा भेजे गए डेटा की निगरानी करने की अनुमति देता है। + +1. VS Code कमांड पैलेट खोलें। + +1. `PlatformIO Serial` टाइप करें ताकि सीरियल मॉनिटर विकल्प खोजा जा सके, और *PlatformIO: Serial Monitor* चुनें। + + ![कमांड पैलेट में PlatformIO सीरियल मॉनिटर विकल्प](../../../../../translated_images/vscode-platformio-serial-monitor-command-palette.b348ec841b8a1c14af503d6fc0bf73c657c79c9acc12a6b6dd485ce3b5826f48.hi.png) + + एक नया टर्मिनल खुलेगा, और सीरियल पोर्ट के माध्यम से भेजा गया डेटा इस टर्मिनल में स्ट्रीम होगा: + + ```output + > Executing task: platformio device monitor < + + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem101 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + Hello World + Hello World + ``` + + `Hello World` हर 5 सेकंड में सीरियल मॉनिटर पर प्रिंट होगा। + +> 💁 आप इस कोड को [code/wio-terminal](../../../../../1-getting-started/lessons/1-introduction-to-iot/code/wio-terminal) फोल्डर में पा सकते हैं। + +😀 आपका 'हैलो वर्ल्ड' प्रोग्राम सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/2-deeper-dive/README.md b/translations/hi/1-getting-started/lessons/2-deeper-dive/README.md new file mode 100644 index 00000000..5897c3fb --- /dev/null +++ b/translations/hi/1-getting-started/lessons/2-deeper-dive/README.md @@ -0,0 +1,275 @@ + +# IoT में गहराई से समझना + +![इस पाठ का स्केच नोट अवलोकन](../../../../../translated_images/lesson-2.324b0580d620c25e0a24fb7fddfc0b29a846dd4b82c08e7a9466d580ee78ce51.hi.jpg) + +> स्केच नोट [नित्या नरसिम्हन](https://github.com/nitya) द्वारा। बड़ी छवि देखने के लिए चित्र पर क्लिक करें। + +यह पाठ [Hello IoT श्रृंखला](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) के हिस्से के रूप में [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn) द्वारा पढ़ाया गया था। यह पाठ 2 वीडियो के रूप में प्रस्तुत किया गया - एक 1 घंटे का पाठ और एक 1 घंटे का ऑफिस आवर, जिसमें पाठ के हिस्सों को गहराई से समझाया गया और प्रश्नों के उत्तर दिए गए। + +[![पाठ 2: IoT में गहराई से समझना](https://img.youtube.com/vi/t0SySWw3z9M/0.jpg)](https://youtu.be/t0SySWw3z9M) + +[![पाठ 2: IoT में गहराई से समझना - ऑफिस आवर](https://img.youtube.com/vi/tTZYf9EST1E/0.jpg)](https://youtu.be/tTZYf9EST1E) + +> 🎥 ऊपर दिए गए चित्रों पर क्लिक करें और वीडियो देखें + +## प्री-लेक्चर क्विज़ + +[प्री-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/3) + +## परिचय + +यह पाठ पिछले पाठ में कवर किए गए कुछ अवधारणाओं को गहराई से समझाता है। + +इस पाठ में हम कवर करेंगे: + +* [IoT एप्लिकेशन के घटक](../../../../../1-getting-started/lessons/2-deeper-dive) +* [माइक्रोकंट्रोलर्स में गहराई से समझना](../../../../../1-getting-started/lessons/2-deeper-dive) +* [सिंगल-बोर्ड कंप्यूटर में गहराई से समझना](../../../../../1-getting-started/lessons/2-deeper-dive) + +## IoT एप्लिकेशन के घटक + +IoT एप्लिकेशन के दो घटक होते हैं - *इंटरनेट* और *चीज़*। आइए इन दोनों घटकों को विस्तार से समझते हैं। + +### चीज़ + +![एक रास्पबेरी पाई 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.hi.jpg) + +IoT में **चीज़** उस डिवाइस को संदर्भित करता है जो भौतिक दुनिया के साथ इंटरैक्ट कर सकता है। ये डिवाइस आमतौर पर छोटे, कम कीमत वाले कंप्यूटर होते हैं, जो कम गति और कम ऊर्जा का उपयोग करते हैं - उदाहरण के लिए, साधारण माइक्रोकंट्रोलर्स जिनमें केवल कुछ किलोबाइट्स RAM होती है (PC में गीगाबाइट्स के बजाय), और जो केवल कुछ सौ मेगाहर्ट्ज पर चलते हैं (PC में गीगाहर्ट्ज के बजाय), लेकिन इतनी कम ऊर्जा का उपयोग करते हैं कि वे बैटरी पर हफ्तों, महीनों या यहां तक कि वर्षों तक चल सकते हैं। + +ये डिवाइस भौतिक दुनिया के साथ इंटरैक्ट करते हैं, या तो सेंसर का उपयोग करके अपने आसपास से डेटा इकट्ठा करते हैं या आउटपुट या एक्टुएटर्स को नियंत्रित करके भौतिक परिवर्तन करते हैं। इसका एक सामान्य उदाहरण स्मार्ट थर्मोस्टेट है - एक डिवाइस जिसमें तापमान सेंसर होता है, एक डायल या टचस्क्रीन जैसे वांछित तापमान सेट करने का साधन होता है, और एक हीटिंग या कूलिंग सिस्टम से कनेक्शन होता है जिसे तब चालू किया जा सकता है जब पता लगाया गया तापमान वांछित सीमा से बाहर हो। तापमान सेंसर यह पता लगाता है कि कमरा बहुत ठंडा है और एक एक्टुएटर हीटिंग चालू कर देता है। + +![एक डायग्राम जिसमें IoT डिवाइस के इनपुट के रूप में तापमान और डायल दिखाया गया है, और आउटपुट के रूप में हीटर का नियंत्रण](../../../../../translated_images/basic-thermostat.a923217fd1f37e5a6f3390396a65c22a387419ea2dd17e518ec24315ba6ae9a8.hi.png) + +IoT डिवाइस के रूप में काम करने वाली चीज़ों की एक बड़ी विविधता है, जैसे कि एक समर्पित हार्डवेयर जो केवल एक चीज़ को सेंसर करता है, या सामान्य प्रयोजन डिवाइस, यहां तक कि आपका स्मार्टफोन भी! एक स्मार्टफोन सेंसर का उपयोग करके अपने आसपास की दुनिया का पता लगा सकता है और एक्टुएटर्स का उपयोग करके दुनिया के साथ इंटरैक्ट कर सकता है - उदाहरण के लिए, GPS सेंसर का उपयोग करके आपका स्थान पता लगाना और स्पीकर का उपयोग करके आपको गंतव्य तक नेविगेशन निर्देश देना। + +✅ उन अन्य सिस्टम्स के बारे में सोचें जो आपके आसपास सेंसर से डेटा पढ़ते हैं और इसका उपयोग निर्णय लेने के लिए करते हैं। एक उदाहरण ओवन का थर्मोस्टेट हो सकता है। क्या आप और अधिक खोज सकते हैं? + +### इंटरनेट + +IoT एप्लिकेशन का **इंटरनेट** पक्ष उन एप्लिकेशन से बना होता है जिनसे IoT डिवाइस डेटा भेज और प्राप्त कर सकता है, साथ ही अन्य एप्लिकेशन जो IoT डिवाइस से डेटा को प्रोसेस कर सकते हैं और यह तय करने में मदद कर सकते हैं कि IoT डिवाइस के एक्टुएटर्स को कौन से अनुरोध भेजे जाएं। + +एक सामान्य सेटअप में एक प्रकार की क्लाउड सेवा होती है जिससे IoT डिवाइस कनेक्ट होता है, और यह क्लाउड सेवा सुरक्षा जैसी चीजों को संभालती है, साथ ही IoT डिवाइस से संदेश प्राप्त करती है और डिवाइस को संदेश वापस भेजती है। यह क्लाउड सेवा अन्य एप्लिकेशन से जुड़ती है जो सेंसर डेटा को प्रोसेस या स्टोर कर सकते हैं, या अन्य सिस्टम्स से डेटा के साथ सेंसर डेटा का उपयोग करके निर्णय ले सकते हैं। + +डिवाइस हमेशा सीधे इंटरनेट से वाईफाई या वायर्ड कनेक्शन के माध्यम से कनेक्ट नहीं करते। कुछ डिवाइस ब्लूटूथ जैसी तकनीकों के माध्यम से एक-दूसरे से बात करने के लिए मेष नेटवर्किंग का उपयोग करते हैं, और एक हब डिवाइस के माध्यम से कनेक्ट होते हैं जिसमें इंटरनेट कनेक्शन होता है। + +स्मार्ट थर्मोस्टेट के उदाहरण में, थर्मोस्टेट होम वाईफाई का उपयोग करके क्लाउड में चल रही क्लाउड सेवा से कनेक्ट होगा। यह तापमान डेटा इस क्लाउड सेवा को भेजेगा, और वहां से इसे किसी प्रकार के डेटाबेस में लिखा जाएगा जिससे गृहस्वामी फोन ऐप का उपयोग करके वर्तमान और पिछले तापमान की जांच कर सके। क्लाउड में एक अन्य सेवा यह जानती होगी कि गृहस्वामी कौन सा तापमान चाहता है, और क्लाउड सेवा के माध्यम से IoT डिवाइस को संदेश भेजेगी ताकि हीटिंग सिस्टम को चालू या बंद किया जा सके। + +![एक डायग्राम जिसमें IoT डिवाइस के इनपुट के रूप में तापमान और डायल दिखाया गया है, IoT डिवाइस और क्लाउड के बीच दो-तरफा संचार, और क्लाउड और फोन के बीच दो-तरफा संचार, और आउटपुट के रूप में हीटर का नियंत्रण](../../../../../translated_images/mobile-controlled-thermostat.4a994010473d8d6a52ba68c67e5f02dc8928c717e93ca4b9bc55525aa75bbb60.hi.png) + +एक और स्मार्ट संस्करण क्लाउड में AI का उपयोग कर सकता है, जो अन्य IoT डिवाइस जैसे कि ऑक्यूपेंसी सेंसर से जुड़े अन्य सेंसर से डेटा के साथ-साथ मौसम और यहां तक कि आपके कैलेंडर जैसे डेटा का उपयोग करके स्मार्ट तरीके से तापमान सेट करने के निर्णय ले सकता है। उदाहरण के लिए, यह आपके कैलेंडर से पढ़कर हीटिंग बंद कर सकता है यदि आप छुट्टी पर हैं, या कमरे के उपयोग के आधार पर कमरे-दर-कमरे हीटिंग बंद कर सकता है, डेटा से सीखते हुए समय के साथ अधिक सटीक होता जा सकता है। + +![एक डायग्राम जिसमें IoT डिवाइस के इनपुट के रूप में कई तापमान सेंसर और डायल दिखाया गया है, IoT डिवाइस और क्लाउड के बीच दो-तरफा संचार, और क्लाउड और फोन, कैलेंडर और मौसम सेवा के बीच दो-तरफा संचार, और आउटपुट के रूप में हीटर का नियंत्रण](../../../../../translated_images/smarter-thermostat.a75855f15d2d9e63d5da9d7ba5847a987f6c9d98e96e770c203532275194e27d.hi.png) + +✅ कौन सा अन्य डेटा इंटरनेट से जुड़े थर्मोस्टेट को और अधिक स्मार्ट बना सकता है? + +### एज पर IoT + +हालांकि IoT में 'I' का मतलब इंटरनेट है, इन डिवाइसों को इंटरनेट से कनेक्ट करने की आवश्यकता नहीं होती। कुछ मामलों में, डिवाइस 'एज' डिवाइसों से कनेक्ट कर सकते हैं - गेटवे डिवाइस जो आपके स्थानीय नेटवर्क पर चलते हैं, जिससे आप डेटा को इंटरनेट पर कॉल किए बिना प्रोसेस कर सकते हैं। यह तब तेज हो सकता है जब आपके पास बहुत सारा डेटा हो या इंटरनेट कनेक्शन धीमा हो, यह आपको ऑफलाइन चलाने की अनुमति देता है जहां इंटरनेट कनेक्टिविटी संभव नहीं है जैसे कि जहाज पर या मानवीय संकट के दौरान आपदा क्षेत्र में प्रतिक्रिया करते समय, और यह आपको डेटा को निजी रखने की अनुमति देता है। कुछ डिवाइस क्लाउड टूल्स का उपयोग करके बनाए गए प्रोसेसिंग कोड को शामिल करेंगे और इसे स्थानीय रूप से चलाएंगे ताकि डेटा को इकट्ठा किया जा सके और इंटरनेट कनेक्शन का उपयोग किए बिना निर्णय लिया जा सके। + +इसका एक उदाहरण स्मार्ट होम डिवाइस जैसे कि Apple HomePod, Amazon Alexa, या Google Home है, जो क्लाउड में प्रशिक्षित AI मॉडल का उपयोग करके आपकी आवाज़ सुनते हैं, लेकिन डिवाइस पर स्थानीय रूप से चलते हैं। ये डिवाइस तब 'जागते' हैं जब कोई निश्चित शब्द या वाक्यांश बोला जाता है, और केवल तभी आपकी आवाज़ को प्रोसेसिंग के लिए इंटरनेट पर भेजते हैं। डिवाइस आपकी आवाज़ को तब तक भेजना बंद कर देगा जब तक कि वह आपके भाषण में विराम का पता न लगा ले। जो कुछ भी आप डिवाइस को जगाने वाले शब्द से पहले कहते हैं, और जो कुछ भी आप डिवाइस के सुनना बंद करने के बाद कहते हैं, वह इंटरनेट पर डिवाइस प्रदाता को नहीं भेजा जाएगा, और इसलिए वह निजी रहेगा। + +✅ उन अन्य परिदृश्यों के बारे में सोचें जहां गोपनीयता महत्वपूर्ण है, इसलिए डेटा प्रोसेसिंग क्लाउड के बजाय एज पर की जानी चाहिए। एक संकेत के रूप में - IoT डिवाइसों पर कैमरे या अन्य इमेजिंग डिवाइस के बारे में सोचें। + +### IoT सुरक्षा + +किसी भी इंटरनेट कनेक्शन के साथ, सुरक्षा एक महत्वपूर्ण विचार है। एक पुराना मजाक है कि 'IoT में S का मतलब सुरक्षा है' - IoT में कोई 'S' नहीं है, यह संकेत देता है कि यह सुरक्षित नहीं है। + +IoT डिवाइस क्लाउड सेवा से कनेक्ट होते हैं, और इसलिए वे केवल उतने ही सुरक्षित होते हैं जितनी वह क्लाउड सेवा - यदि आपकी क्लाउड सेवा किसी भी डिवाइस को कनेक्ट करने की अनुमति देती है तो दुर्भावनापूर्ण डेटा भेजा जा सकता है, या वायरस हमले हो सकते हैं। इसका बहुत वास्तविक दुनिया में प्रभाव हो सकता है क्योंकि IoT डिवाइस अन्य डिवाइसों के साथ इंटरैक्ट और नियंत्रण करते हैं। उदाहरण के लिए, [Stuxnet वर्म](https://wikipedia.org/wiki/Stuxnet) ने सेंट्रीफ्यूज में वाल्व को हेरफेर करके उन्हें नुकसान पहुंचाया। हैकर्स ने [खराब सुरक्षा का लाभ उठाकर बेबी मॉनिटर](https://www.npr.org/sections/thetwo-way/2018/06/05/617196788/s-c-mom-says-baby-monitor-was-hacked-experts-say-many-devices-are-vulnerable) और अन्य होम सर्विलांस डिवाइस तक पहुंच प्राप्त की है। + +> 💁 कभी-कभी IoT डिवाइस और एज डिवाइस पूरी तरह से इंटरनेट से अलग नेटवर्क पर चलते हैं ताकि डेटा को निजी और सुरक्षित रखा जा सके। इसे [एयर-गैपिंग](https://wikipedia.org/wiki/Air_gap_(networking)) कहा जाता है। + +## माइक्रोकंट्रोलर्स में गहराई से समझना + +पिछले पाठ में हमने माइक्रोकंट्रोलर्स का परिचय दिया था। अब आइए उन्हें गहराई से समझते हैं। + +### CPU + +CPU माइक्रोकंट्रोलर का 'मस्तिष्क' है। यह वह प्रोसेसर है जो आपका कोड चलाता है और किसी भी जुड़े डिवाइस से डेटा भेज और प्राप्त कर सकता है। CPU में एक या अधिक कोर हो सकते हैं - मूल रूप से एक या अधिक CPU जो आपके कोड को चलाने के लिए एक साथ काम कर सकते हैं। + +CPU एक घड़ी पर निर्भर करता है जो प्रति सेकंड लाखों या अरबों बार टिक करता है। प्रत्येक टिक, या चक्र, CPU द्वारा किए जा सकने वाले कार्यों को सिंक्रनाइज़ करता है। प्रत्येक टिक के साथ, CPU प्रोग्राम से एक निर्देश निष्पादित कर सकता है, जैसे कि बाहरी डिवाइस से डेटा प्राप्त करना या गणितीय गणना करना। यह नियमित चक्र सभी कार्यों को पूरा करने की अनुमति देता है इससे पहले कि अगला निर्देश प्रोसेस किया जाए। + +जितनी तेज़ घड़ी की गति, उतने अधिक निर्देश प्रति सेकंड प्रोसेस किए जा सकते हैं, और इसलिए CPU उतना ही तेज़ होता है। CPU की गति [हर्ट्ज (Hz)](https://wikipedia.org/wiki/Hertz) में मापी जाती है, एक मानक इकाई जहां 1 Hz का मतलब प्रति सेकंड एक चक्र या घड़ी टिक है। + +> 🎓 CPU की गति अक्सर MHz या GHz में दी जाती है। 1MHz 1 मिलियन Hz है, 1GHz 1 बिलियन Hz है। + +> 💁 CPU प्रोग्राम को [फेच-डिकोड-एक्ज़ीक्यूट चक्र](https://wikipedia.org/wiki/Instruction_cycle) का उपयोग करके निष्पादित करता है। प्रत्येक घड़ी टिक के लिए, CPU मेमोरी से अगला निर्देश फेच करेगा, इसे डिकोड करेगा, फिर इसे निष्पादित करेगा जैसे कि दो संख्याओं को जोड़ने के लिए एक एरिथमेटिक लॉजिक यूनिट (ALU) का उपयोग करना। कुछ निष्पादन को चलाने में कई टिक लगते हैं, इसलिए अगला चक्र उस टिक पर चलेगा जब निर्देश पूरा हो जाएगा। + +![फेच डिकोड एक्ज़ीक्यूट चक्र दिखाते हुए जिसमें RAM में संग्रहीत प्रोग्राम से एक निर्देश फेच किया जाता है, फिर CPU पर डिकोड और निष्पादित किया जाता है](../../../../../translated_images/fetch-decode-execute.2fd6f150f6280392807f4475382319abd0cee0b90058e1735444d6baa6f2078c.hi.png) + +माइक्रोकंट्रोलर्स में डेस्कटॉप या लैपटॉप कंप्यूटर, या यहां तक कि अधिकांश स्मार्टफोन की तुलना में बहुत कम घड़ी की गति होती है। उदाहरण के लिए, Wio Terminal में एक CPU होता है जो 120MHz या 120,000,000 चक्र प्रति सेकंड पर चलता है। + +✅ एक औसत PC या Mac में कई कोर वाले CPU होते हैं जो कई गीगाहर्ट्ज पर चलते हैं, जिसका मतलब है कि घड़ी प्रति सेकंड अरबों बार टिक करती है। अपने कंप्यूटर की घड़ी की गति का शोध करें और तुलना करें कि यह Wio टर्मिनल से कितनी बार तेज़ है। + +प्रत्येक घड़ी चक्र ऊर्जा खींचता है और गर्मी उत्पन्न करता है। जितने तेज़ टिक, उतनी अधिक ऊर्जा खपत और अधिक गर्मी उत्पन्न होती है। PC में गर्मी को हटाने के लिए हीट सिंक और पंखे होते हैं, जिनके बिना वे सेकंडों में ओवरहीट होकर बंद हो जाएंगे। माइक्रोकंट्रोलर्स में अक्सर इनमें से कोई भी नहीं होता क्योंकि वे बहुत ठंडे चलते हैं और इसलिए बहुत धीमे। PC मुख्य बिजली या बड़ी बैटरी पर कुछ घंटों के लिए चलते हैं, माइक्रोकंट्रोलर्स छोटे बैटरी पर दिनों, महीनों, या यहां तक कि वर्षों तक चल सकते हैं। माइक्रोकंट्रोलर्स में ऐसे कोर भी हो सकते हैं जो अलग-अलग गति पर चलते हैं, जब CPU पर मांग कम होती है तो धीमे कम ऊर्जा वाले कोर पर स्विच करके ऊर्जा खपत को कम करते हैं। + +> 💁 कुछ PC और Mac भी तेज़ उच्च ऊर्जा वाले कोर और धीमे कम ऊर्जा वाले कोर के उसी मिश्रण को अपनाते हैं, बैटरी बचाने के लिए स्विच करते हैं। उदाहरण के लिए, नवीनतम Apple लैपटॉप में M1 चिप 4 प्रदर्शन कोर और 4 दक्षता कोर के बीच स्विच कर सकता है ताकि बैटरी जीवन या गति को अनुकूलित किया जा सके, यह इस बात पर निर्भर करता है कि कौन सा कार्य चल रहा है। + +✅ थोड़ा शोध करें: CPU पर [Wikipedia CPU लेख](https://wikipedia.org/wiki/Central_processing_unit) पढ़ें। + +#### कार्य + +Wio टर्मिनल की जांच करें। + +यदि आप इन पाठों के लिए Wio टर्मिनल का उपयोग कर रहे हैं, तो CPU खोजने का प्रयास करें। [Wio टर्मिनल उत्पाद पृष्ठ](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) के *हार्डवेयर अवलोकन* अनुभाग में आंतरिक भागों की तस्वीर खोजें, और पीछे की पारदर्शी प्लास्टिक विंडो के माध्यम से CPU को खोजने का प्रयास करें। + +### मेमोरी + +माइक्रोकंट्रोलर्स में आमतौर पर दो प्रकार की मेमोरी होती है - प्रोग्राम मेमोरी और रैंडम-एक्सेस मेमोरी (RAM)। + +प्रोग्राम मेमोरी गैर-वाष्पशील होती है, जिसका मतलब है कि जो कुछ भी इसमें लिखा जाता है वह तब भी रहता है जब डिवाइस में कोई बिजली नहीं होती। यह वह मेमोरी है जो आपके प्रोग्राम कोड को संग्रहीत करती है। + +RAM वह मेमोरी है जिसका उपयोग प्रोग्राम द्वारा चलाने के लिए किया जाता है, जिसमें आपके प्रोग्राम द्वारा आवंटित वेरिएबल्स और परिधीय उपकरणों से एकत्रित डेटा होता है। RAM वाष्पशील होती है, जब बिजली चली जाती है तो सामग्री खो जाती है, प्रभावी रूप से आपके प्रोग्राम को रीसेट कर देती है। +🎓 प्रोग्राम मेमोरी आपके कोड को संग्रहीत करती है और तब भी बनी रहती है जब बिजली न हो। +🎓 RAM का उपयोग आपके प्रोग्राम को चलाने के लिए किया जाता है और बिजली न होने पर इसे रीसेट कर दिया जाता है। + +CPU की तरह, माइक्रोकंट्रोलर में मेमोरी पीसी या मैक की तुलना में बहुत छोटी होती है। एक सामान्य पीसी में 8 गीगाबाइट (GB) RAM हो सकती है, यानी 8,000,000,000 बाइट्स, जिसमें प्रत्येक बाइट में एक अक्षर या 0-255 तक की संख्या को स्टोर करने की जगह होती है। एक माइक्रोकंट्रोलर में केवल किलोबाइट्स (KB) RAM होती है, जिसमें एक किलोबाइट 1,000 बाइट्स के बराबर होता है। ऊपर उल्लेखित Wio टर्मिनल में 192KB RAM है, यानी 192,000 बाइट्स - एक औसत पीसी की तुलना में 40,000 गुना कम! + +नीचे दिए गए चित्र में 192KB और 8GB के बीच आकार का अंतर दिखाया गया है - केंद्र में छोटा बिंदु 192KB का प्रतिनिधित्व करता है। + +![192KB और 8GB के बीच तुलना - 40,000 गुना बड़ा](../../../../../translated_images/ram-comparison.6beb73541b42ac6ffde64cdf79fc925a84b932ce7ebd4d41d5fd7afc1257a696.hi.png) + +प्रोग्राम स्टोरेज भी पीसी की तुलना में छोटी होती है। एक सामान्य पीसी में प्रोग्राम स्टोरेज के लिए 500GB हार्ड ड्राइव हो सकती है, जबकि एक माइक्रोकंट्रोलर में केवल किलोबाइट्स या शायद कुछ मेगाबाइट्स (MB) स्टोरेज होती है (1MB = 1,000KB, या 1,000,000 बाइट्स)। Wio टर्मिनल में 4MB प्रोग्राम स्टोरेज है। + +✅ थोड़ा शोध करें: जिस कंप्यूटर का उपयोग आप इसे पढ़ने के लिए कर रहे हैं, उसमें कितनी RAM और स्टोरेज है? इसकी तुलना एक माइक्रोकंट्रोलर से कैसे होती है? + +### इनपुट/आउटपुट + +माइक्रोकंट्रोलर को सेंसर से डेटा पढ़ने और एक्ट्यूएटर्स को नियंत्रण संकेत भेजने के लिए इनपुट और आउटपुट (I/O) कनेक्शन की आवश्यकता होती है। इनमें आमतौर पर कई सामान्य-उद्देश्य इनपुट/आउटपुट (GPIO) पिन होते हैं। इन पिन्स को सॉफ़्टवेयर में इनपुट (यानी वे सिग्नल प्राप्त करते हैं) या आउटपुट (वे सिग्नल भेजते हैं) के रूप में कॉन्फ़िगर किया जा सकता है। + +🧠⬅️ इनपुट पिन्स का उपयोग सेंसर से मान पढ़ने के लिए किया जाता है। + +🧠➡️ आउटपुट पिन्स एक्ट्यूएटर्स को निर्देश भेजते हैं। + +✅ आप इसके बारे में अगले पाठ में अधिक जानेंगे। + +#### कार्य + +Wio टर्मिनल की जांच करें। + +यदि आप इन पाठों के लिए Wio टर्मिनल का उपयोग कर रहे हैं, तो GPIO पिन्स खोजें। [Wio टर्मिनल उत्पाद पृष्ठ](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) के *Pinout डायग्राम* अनुभाग को खोजें ताकि यह जान सकें कि कौन से पिन कौन से हैं। Wio टर्मिनल के साथ एक स्टिकर आता है जिसे आप पीछे लगा सकते हैं जिसमें पिन नंबर होते हैं, इसलिए यदि आपने इसे अभी तक नहीं लगाया है तो इसे जोड़ें। + +### भौतिक आकार + +माइक्रोकंट्रोलर आमतौर पर आकार में छोटे होते हैं, सबसे छोटे, [Freescale Kinetis KL03 MCU](https://www.edn.com/tiny-arm-cortex-m0-based-mcu-shrinks-package/) इतना छोटा है कि यह गोल्फ बॉल के डिंपल में फिट हो सकता है। एक पीसी में केवल CPU का आकार 40mm x 40mm हो सकता है, और इसमें हीट सिंक और फैन शामिल नहीं हैं जो यह सुनिश्चित करने के लिए आवश्यक हैं कि CPU कुछ सेकंड से अधिक समय तक बिना ओवरहीटिंग के चल सके, जो एक पूर्ण माइक्रोकंट्रोलर की तुलना में काफी बड़ा है। Wio टर्मिनल डेवलपर किट जिसमें माइक्रोकंट्रोलर, केस, स्क्रीन और कनेक्शन और घटकों की एक श्रृंखला शामिल है, एक नंगे Intel i9 CPU से बहुत बड़ा नहीं है, और हीट सिंक और फैन वाले CPU से काफी छोटा है! + +| डिवाइस | आकार | +| ------------------------------- | --------------------- | +| Freescale Kinetis KL03 | 1.6mm x 2mm x 1mm | +| Wio टर्मिनल | 72mm x 57mm x 12mm | +| Intel i9 CPU, हीट सिंक और फैन | 136mm x 145mm x 103mm | + +### फ्रेमवर्क और ऑपरेटिंग सिस्टम + +उनकी कम गति और मेमोरी आकार के कारण, माइक्रोकंट्रोलर एक ऑपरेटिंग सिस्टम (OS) नहीं चलाते हैं जैसा कि डेस्कटॉप के संदर्भ में होता है। आपके कंप्यूटर को चलाने वाला ऑपरेटिंग सिस्टम (Windows, Linux या macOS) बहुत सारी मेमोरी और प्रोसेसिंग पावर की आवश्यकता होती है ताकि ऐसे कार्य चलाए जा सकें जो माइक्रोकंट्रोलर के लिए पूरी तरह से अनावश्यक हैं। याद रखें कि माइक्रोकंट्रोलर आमतौर पर एक या अधिक बहुत विशिष्ट कार्यों को करने के लिए प्रोग्राम किए जाते हैं, जबकि एक सामान्य उद्देश्य कंप्यूटर जैसे पीसी या मैक को उपयोगकर्ता इंटरफ़ेस का समर्थन करने, संगीत या फिल्में चलाने, दस्तावेज़ या कोड लिखने के उपकरण प्रदान करने, गेम खेलने, या इंटरनेट ब्राउज़ करने की आवश्यकता होती है। + +एक OS के बिना माइक्रोकंट्रोलर को प्रोग्राम करने के लिए आपको कुछ टूलिंग की आवश्यकता होती है जो आपको अपना कोड इस तरह से बनाने की अनुमति देती है कि माइक्रोकंट्रोलर इसे चला सके, और किसी भी परिधीय से बात करने के लिए APIs का उपयोग कर सके। प्रत्येक माइक्रोकंट्रोलर अलग होता है, इसलिए निर्माता आमतौर पर मानक फ्रेमवर्क का समर्थन करते हैं जो आपको एक मानक 'रेसिपी' का पालन करने की अनुमति देते हैं ताकि आपका कोड बनाया जा सके और किसी भी माइक्रोकंट्रोलर पर चल सके जो उस फ्रेमवर्क का समर्थन करता है। + +आप माइक्रोकंट्रोलर को एक OS का उपयोग करके प्रोग्राम कर सकते हैं - जिसे अक्सर रियल-टाइम ऑपरेटिंग सिस्टम (RTOS) कहा जाता है, क्योंकि इन्हें वास्तविक समय में परिधीयों से डेटा भेजने और प्राप्त करने को संभालने के लिए डिज़ाइन किया गया है। ये ऑपरेटिंग सिस्टम बहुत हल्के होते हैं और निम्नलिखित सुविधाएँ प्रदान करते हैं: + +* मल्टी-थ्रेडिंग, जिससे आपका कोड एक ही समय में एक से अधिक कोड ब्लॉक चला सकता है, चाहे वह कई कोर पर हो या एक कोर पर बारी-बारी से। +* नेटवर्किंग, जो इंटरनेट पर सुरक्षित रूप से संचार करने की अनुमति देती है। +* ग्राफिकल यूजर इंटरफेस (GUI) घटक, जो स्क्रीन वाले उपकरणों पर यूजर इंटरफेस (UI) बनाने के लिए होते हैं। + +✅ कुछ अलग-अलग RTOSes के बारे में पढ़ें: [Azure RTOS](https://azure.microsoft.com/services/rtos/?WT.mc_id=academic-17441-jabenn), [FreeRTOS](https://www.freertos.org), [Zephyr](https://www.zephyrproject.org) + +#### Arduino + +![Arduino लोगो](../../../../../images/arduino-logo.svg) + +[Arduino](https://www.arduino.cc) शायद सबसे लोकप्रिय माइक्रोकंट्रोलर फ्रेमवर्क है, खासकर छात्रों, शौकियों और निर्माताओं के बीच। Arduino एक ओपन सोर्स इलेक्ट्रॉनिक्स प्लेटफॉर्म है जो सॉफ़्टवेयर और हार्डवेयर को जोड़ता है। आप Arduino संगत बोर्ड Arduino से या अन्य निर्माताओं से खरीद सकते हैं, फिर Arduino फ्रेमवर्क का उपयोग करके कोड कर सकते हैं। + +Arduino बोर्ड C या C++ में कोड किए जाते हैं। C/C++ का उपयोग करने से आपका कोड बहुत छोटा और तेज़ी से चलने योग्य होता है, जो माइक्रोकंट्रोलर जैसे सीमित डिवाइस पर आवश्यक होता है। Arduino एप्लिकेशन का मुख्य भाग एक स्केच कहलाता है और इसमें 2 फंक्शन होते हैं - `setup` और `loop`। जब बोर्ड चालू होता है, तो Arduino फ्रेमवर्क कोड पहले `setup` फंक्शन को एक बार चलाएगा, फिर `loop` फंक्शन को बार-बार चलाएगा, इसे तब तक लगातार चलाएगा जब तक कि पावर बंद न हो जाए। + +आप अपने सेटअप कोड को `setup` फंक्शन में लिखेंगे, जैसे WiFi और क्लाउड सेवाओं से कनेक्ट करना या इनपुट और आउटपुट के लिए पिन्स को इनिशियलाइज़ करना। आपका लूप कोड फिर प्रोसेसिंग कोड को शामिल करेगा, जैसे सेंसर से डेटा पढ़ना और इसे क्लाउड पर भेजना। आप आमतौर पर प्रत्येक लूप में एक देरी जोड़ेंगे, उदाहरण के लिए, यदि आप केवल हर 10 सेकंड में सेंसर डेटा भेजना चाहते हैं, तो आप लूप के अंत में 10 सेकंड की देरी जोड़ेंगे ताकि माइक्रोकंट्रोलर सो सके, पावर बचा सके, और फिर 10 सेकंड बाद जब आवश्यक हो तो लूप को फिर से चलाए। + +![Arduino स्केच पहले setup चलाता है, फिर loop को बार-बार चलाता है](../../../../../translated_images/arduino-sketch.79590cb837ff7a7c6a68d1afda6cab83fd53d3bb1bd9a8bf2eaf8d693a4d3ea6.hi.png) + +✅ इस प्रोग्राम आर्किटेक्चर को *इवेंट लूप* या *मैसेज लूप* के रूप में जाना जाता है। कई एप्लिकेशन इसे बैकग्राउंड में उपयोग करते हैं और यह अधिकांश डेस्कटॉप एप्लिकेशन के लिए मानक है जो Windows, macOS या Linux जैसे OS पर चलते हैं। `loop` यूजर इंटरफेस घटकों जैसे बटन, या कीबोर्ड जैसे उपकरणों से संदेशों को सुनता है और उनका जवाब देता है। आप इसके बारे में अधिक पढ़ सकते हैं इस [इवेंट लूप पर लेख](https://wikipedia.org/wiki/Event_loop) में। + +Arduino मानक लाइब्रेरी प्रदान करता है जो माइक्रोकंट्रोलर और I/O पिन्स के साथ इंटरैक्ट करने के लिए होती हैं, और अलग-अलग माइक्रोकंट्रोलर पर चलने के लिए अलग-अलग कार्यान्वयन प्रदान करती हैं। उदाहरण के लिए, [`delay` फंक्शन](https://www.arduino.cc/reference/en/language/functions/time/delay/) प्रोग्राम को एक निश्चित समय के लिए रोक देगा, [`digitalRead` फंक्शन](https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/) दिए गए पिन से `HIGH` या `LOW` मान पढ़ेगा, चाहे कोड किस बोर्ड पर चल रहा हो। ये मानक लाइब्रेरी सुनिश्चित करती हैं कि एक बोर्ड के लिए लिखा गया Arduino कोड किसी अन्य Arduino बोर्ड के लिए पुनः संकलित किया जा सकता है और चलेगा, बशर्ते कि पिन्स समान हों और बोर्ड समान सुविधाओं का समर्थन करें। + +Arduino के लिए एक बड़ा थर्ड-पार्टी लाइब्रेरी इकोसिस्टम है जो आपको अपने Arduino प्रोजेक्ट्स में अतिरिक्त सुविधाएँ जोड़ने की अनुमति देता है, जैसे सेंसर और एक्ट्यूएटर्स का उपयोग करना या क्लाउड IoT सेवाओं से कनेक्ट करना। + +##### कार्य + +Wio टर्मिनल की जांच करें। + +यदि आप इन पाठों के लिए Wio टर्मिनल का उपयोग कर रहे हैं, तो पिछले पाठ में लिखे गए कोड को फिर से पढ़ें। `setup` और `loop` फंक्शन खोजें। सीरियल आउटपुट की निगरानी करें कि `loop` फंक्शन बार-बार कॉल किया जा रहा है। `setup` फंक्शन में सीरियल पोर्ट पर लिखने के लिए कोड जोड़ने का प्रयास करें और देखें कि यह कोड हर बार डिवाइस को रीबूट करने पर केवल एक बार कॉल किया जाता है। डिवाइस को साइड पर पावर स्विच के साथ रीबूट करने का प्रयास करें ताकि यह दिखाया जा सके कि यह हर बार डिवाइस रीबूट होने पर कॉल किया जाता है। + +## सिंगल-बोर्ड कंप्यूटरों में गहराई से गोता लगाना + +पिछले पाठ में, हमने सिंगल-बोर्ड कंप्यूटरों का परिचय दिया। अब आइए उनके बारे में गहराई से जानें। + +### Raspberry Pi + +![Raspberry Pi लोगो](../../../../../translated_images/raspberry-pi-logo.4efaa16605cee05489d8fa53941e991b3757aa24c20a95abdcf8cfd761953596.hi.png) + +[Raspberry Pi Foundation](https://www.raspberrypi.org) एक यूके की चैरिटी है जिसे 2009 में कंप्यूटर विज्ञान के अध्ययन को बढ़ावा देने के लिए स्थापित किया गया था, विशेष रूप से स्कूल स्तर पर। इस मिशन के हिस्से के रूप में, उन्होंने एक सिंगल-बोर्ड कंप्यूटर विकसित किया, जिसे Raspberry Pi कहा जाता है। Raspberry Pis वर्तमान में 3 वेरिएंट में उपलब्ध हैं - एक पूर्ण आकार का संस्करण, छोटा Pi Zero, और एक कंप्यूट मॉड्यूल जिसे आपके अंतिम IoT डिवाइस में बनाया जा सकता है। + +![Raspberry Pi 4](../../../../../translated_images/raspberry-pi-4.fd4590d308c3d456db1327e86b395ddcd735513267aafd4879ea2785f7792eac.hi.jpg) + +पूर्ण आकार के Raspberry Pi का नवीनतम संस्करण Raspberry Pi 4B है। इसमें 1.5GHz पर चलने वाला क्वाड-कोर (4 कोर) CPU, 2, 4, या 8GB RAM, गीगाबिट ईथरनेट, WiFi, 2 HDMI पोर्ट जो 4k स्क्रीन का समर्थन करते हैं, एक ऑडियो और कंपोजिट वीडियो आउटपुट पोर्ट, USB पोर्ट (2 USB 2.0, 2 USB 3.0), 40 GPIO पिन्स, Raspberry Pi कैमरा मॉड्यूल के लिए एक कैमरा कनेक्टर, और एक SD कार्ड स्लॉट है। यह सब एक बोर्ड पर है जो 88mm x 58mm x 19.5mm है और 3A USB-C पावर सप्लाई द्वारा संचालित होता है। ये US$35 से शुरू होते हैं, जो पीसी या मैक की तुलना में बहुत सस्ते हैं। + +> 💁 एक Pi400 ऑल-इन-वन कंप्यूटर भी है जिसमें एक कीबोर्ड में Pi4 बनाया गया है। + +![Raspberry Pi Zero](../../../../../translated_images/raspberry-pi-zero.f7a4133e1e7d54bb3dbb32319b217a53c5b94871995a54647f2894b54206b8d8.hi.jpg) + +Pi Zero आकार में बहुत छोटा है, और कम पावर वाला है। इसमें एक सिंगल कोर 1GHz CPU, 512MB RAM, WiFi (Zero W मॉडल में), एक सिंगल HDMI पोर्ट, एक माइक्रो-USB पोर्ट, 40 GPIO पिन्स, Raspberry Pi कैमरा मॉड्यूल के लिए एक कैमरा कनेक्टर, और एक SD कार्ड स्लॉट है। इसका आकार 65mm x 30mm x 5mm है, और यह बहुत कम पावर खींचता है। Zero US$5 है, जबकि WiFi वाला W संस्करण US$10 है। + +> 🎓 दोनों में उपयोग किए गए CPU ARM प्रोसेसर हैं, जो Intel/AMD x86 या x64 प्रोसेसर से अलग हैं जो अधिकांश पीसी और मैक में पाए जाते हैं। ये कुछ माइक्रोकंट्रोलर में पाए जाने वाले CPU के समान हैं, साथ ही लगभग सभी मोबाइल फोन, Microsoft Surface X, और नए Apple Silicon आधारित Apple Macs में भी। + +Raspberry Pi के सभी वेरिएंट Debian Linux का एक संस्करण चलाते हैं जिसे Raspberry Pi OS कहा जाता है। यह एक लाइट संस्करण के रूप में उपलब्ध है जिसमें कोई डेस्कटॉप नहीं है, जो 'हेडलैस' प्रोजेक्ट्स के लिए बिल्कुल सही है जहां आपको स्क्रीन की आवश्यकता नहीं है, या एक पूर्ण संस्करण जिसमें एक पूर्ण डेस्कटॉप वातावरण है, जिसमें वेब ब्राउज़र, ऑफिस एप्लिकेशन, कोडिंग टूल और गेम्स शामिल हैं। चूंकि OS Debian Linux का एक संस्करण है, आप कोई भी एप्लिकेशन या टूल इंस्टॉल कर सकते हैं जो Debian पर चलता है और Pi के अंदर ARM प्रोसेसर के लिए बनाया गया है। + +#### कार्य + +Raspberry Pi की जांच करें। + +यदि आप इन पाठों के लिए Raspberry Pi का उपयोग कर रहे हैं, तो बोर्ड पर विभिन्न हार्डवेयर घटकों के बारे में पढ़ें। + +* आप [Raspberry Pi हार्डवेयर दस्तावेज़ पृष्ठ](https://www.raspberrypi.org/documentation/hardware/raspberrypi/) पर उपयोग किए गए प्रोसेसर के विवरण पा सकते हैं। उस प्रोसेसर के बारे में पढ़ें जो आपके Pi में उपयोग किया गया है। +* GPIO पिन्स का पता लगाएं। उनके बारे में अधिक पढ़ें [Raspberry Pi GPIO दस्तावेज़](https://www.raspberrypi.org/documentation/hardware/raspberrypi/gpio/README.md) पर। [GPIO पिन उपयोग गाइड](https://www.raspberrypi.org/documentation/usage/gpio/README.md) का उपयोग करके अपने Pi पर विभिन्न पिन्स की पहचान करें। + +### सिंगल-बोर्ड कंप्यूटरों को प्रोग्राम करना + +सिंगल-बोर्ड कंप्यूटर पूर्ण कंप्यूटर होते हैं, जो एक पूर्ण OS चलाते हैं। इसका मतलब है कि आप उन्हें कोड करने के लिए प्रोग्रामिंग भाषाओं, फ्रेमवर्क और टूल्स की एक विस्तृत श्रृंखला का उपयोग कर सकते हैं, जबकि माइक्रोकंट्रोलर बोर्डों पर निर्भर करते हैं जैसे Arduino फ्रेमवर्क में समर्थन। अधिकांश प्रोग्रामिंग भाषाओं में GPIO पिन्स तक पहुंचने के लिए लाइब्रेरी होती हैं ताकि सेंसर और एक्ट्यूएटर्स से डेटा भेजा और प्राप्त किया जा सके। + +✅ आप कौन-कौन सी प्रोग्रामिंग भाषाओं से परिचित हैं? क्या वे Linux पर समर्थित हैं? + +Raspberry Pi पर IoT एप्लिकेशन बनाने के लिए सबसे सामान्य प्रोग्रामिंग भाषा Python है। Pi के लिए डिज़ाइन किए गए हार्डवेयर का एक बड़ा इकोसिस्टम है, और इनमें से लगभग सभी में Python लाइब्रेरी के रूप में उपयोग करने के लिए आवश्यक कोड शामिल है। इनमें से कुछ इकोसिस्टम 'हैट्स' पर आधारित हैं - इन्हें इसलिए कहा जाता है क्योंकि वे Pi के ऊपर एक हैट की तरह बैठते हैं और 40 GPIO पिन्स के बड़े सॉकेट से जुड़ते हैं। ये हैट्स अतिरिक्त क्षमताएँ प्रदान करते हैं, जैसे स्क्रीन, सेंसर, रिमोट कंट्रोल कार, या सेंसर को प्लग इन करने के लिए अडैप्टर। +### पेशेवर IoT तैनाती में सिंगल-बोर्ड कंप्यूटर का उपयोग + +सिंगल-बोर्ड कंप्यूटर केवल डेवलपर किट के रूप में ही नहीं, बल्कि पेशेवर IoT तैनाती में भी उपयोग किए जाते हैं। ये हार्डवेयर को नियंत्रित करने और मशीन लर्निंग मॉडल चलाने जैसे जटिल कार्यों को संचालित करने का एक शक्तिशाली तरीका प्रदान कर सकते हैं। उदाहरण के लिए, [Raspberry Pi 4 compute module](https://www.raspberrypi.org/blog/raspberry-pi-compute-module-4/) है, जो Raspberry Pi 4 की सारी शक्ति प्रदान करता है लेकिन एक कॉम्पैक्ट और सस्ते रूप में, जिसमें अधिकांश पोर्ट नहीं होते हैं। इसे कस्टम हार्डवेयर में स्थापित करने के लिए डिज़ाइन किया गया है। + +--- + +## 🚀 चुनौती + +पिछले पाठ में चुनौती थी कि आप अपने घर, स्कूल या कार्यस्थल में जितने IoT उपकरण हो सकते हैं, उनकी सूची बनाएं। इस सूची में प्रत्येक उपकरण के लिए, क्या आपको लगता है कि वे माइक्रोकंट्रोलर, सिंगल-बोर्ड कंप्यूटर, या दोनों के मिश्रण पर आधारित हैं? + +## पोस्ट-लेक्चर क्विज़ + +[पोस्ट-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/4) + +## समीक्षा और स्व-अध्ययन + +* [Arduino गेटिंग स्टार्टेड गाइड](https://www.arduino.cc/en/Guide/Introduction) पढ़ें ताकि Arduino प्लेटफॉर्म के बारे में अधिक समझ सकें। +* [Raspberry Pi 4 का परिचय](https://www.raspberrypi.org/products/raspberry-pi-4-model-b/) पढ़ें ताकि Raspberry Pis के बारे में अधिक जान सकें। +* [Electrical Engineering Journal में CPUs, MPUs, MCUs, और GPUs क्या हैं?](https://www.eejournal.com/article/what-the-faq-are-cpus-mpus-mcus-and-gpus/) लेख में कुछ अवधारणाओं और संक्षेपाक्षरों के बारे में अधिक जानें। + +✅ इन गाइड्स का उपयोग करें, साथ ही [हार्डवेयर गाइड](../../../hardware.md) में दिए गए लिंक के माध्यम से दिखाए गए लागतों को देखें, ताकि आप तय कर सकें कि कौन सा हार्डवेयर प्लेटफॉर्म उपयोग करना है, या आप वर्चुअल डिवाइस का उपयोग करना पसंद करेंगे। + +## असाइनमेंट + +[माइक्रोकंट्रोलर और सिंगल-बोर्ड कंप्यूटर की तुलना और विरोधाभास](assignment.md) + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/2-deeper-dive/assignment.md b/translations/hi/1-getting-started/lessons/2-deeper-dive/assignment.md new file mode 100644 index 00000000..95c81431 --- /dev/null +++ b/translations/hi/1-getting-started/lessons/2-deeper-dive/assignment.md @@ -0,0 +1,24 @@ + +# माइक्रोकंट्रोलर्स और सिंगल-बोर्ड कंप्यूटर की तुलना और अंतर + +## निर्देश + +इस पाठ में माइक्रोकंट्रोलर्स और सिंगल-बोर्ड कंप्यूटर के बारे में चर्चा की गई। एक तालिका बनाएं जिसमें उनकी तुलना और अंतर दिखाया गया हो, और कम से कम 2 कारण बताएं कि आप माइक्रोकंट्रोलर को सिंगल-बोर्ड कंप्यूटर के बजाय क्यों चुनेंगे, और कम से कम 2 कारण बताएं कि आप सिंगल-बोर्ड कंप्यूटर को माइक्रोकंट्रोलर के बजाय क्यों चुनेंगे। + +## मूल्यांकन मानदंड + +| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | +| ------- | -------- | -------- | ------------------ | +| माइक्रोकंट्रोलर्स और सिंगल-बोर्ड कंप्यूटर की तुलना के लिए तालिका बनाना | कई आइटम्स के साथ सही तरीके से तुलना और अंतर दिखाने वाली सूची बनाई | केवल कुछ आइटम्स के साथ सूची बनाई | केवल एक आइटम या कोई आइटम नहीं बना पाए जो तुलना और अंतर दिखाए | +| एक को दूसरे के ऊपर उपयोग करने के कारण | माइक्रोकंट्रोलर्स के लिए 2 या अधिक कारण और सिंगल-बोर्ड कंप्यूटर के लिए 2 या अधिक कारण प्रदान किए | माइक्रोकंट्रोलर्स के लिए केवल 1-2 कारण और सिंगल-बोर्ड कंप्यूटर के लिए केवल 1-2 कारण प्रदान किए | माइक्रोकंट्रोलर्स या सिंगल-बोर्ड कंप्यूटर के लिए 1 या अधिक कारण प्रदान करने में असमर्थ रहे | + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/README.md b/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/README.md new file mode 100644 index 00000000..b561fe68 --- /dev/null +++ b/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/README.md @@ -0,0 +1,228 @@ + +# सेंसर और एक्ट्यूएटर्स के साथ भौतिक दुनिया से जुड़ें + +![इस पाठ का स्केच नोट](../../../../../translated_images/lesson-3.cc3b7b4cd646de598698cce043c0393fd62ef42bac2eaf60e61272cd844250f4.hi.jpg) + +> स्केच नोट: [नित्या नरसिम्हन](https://github.com/nitya) द्वारा। बड़ी छवि देखने के लिए क्लिक करें। + +यह पाठ [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn) के [Hello IoT सीरीज़](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) का हिस्सा है। इसे दो वीडियो के रूप में पढ़ाया गया था - एक 1 घंटे का पाठ और एक 1 घंटे का ऑफिस आवर, जिसमें पाठ के हिस्सों को गहराई से समझाया गया और सवालों के जवाब दिए गए। + +[![पाठ 3: सेंसर और एक्ट्यूएटर्स के साथ भौतिक दुनिया से जुड़ें](https://img.youtube.com/vi/Lqalu1v6aF4/0.jpg)](https://youtu.be/Lqalu1v6aF4) + +[![पाठ 3: सेंसर और एक्ट्यूएटर्स के साथ भौतिक दुनिया से जुड़ें - ऑफिस आवर](https://img.youtube.com/vi/qR3ekcMlLWA/0.jpg)](https://youtu.be/qR3ekcMlLWA) + +> 🎥 ऊपर दी गई छवियों पर क्लिक करें और वीडियो देखें + +## प्री-लेक्चर क्विज़ + +[प्री-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/5) + +## परिचय + +इस पाठ में आपके IoT डिवाइस के लिए दो महत्वपूर्ण अवधारणाओं - सेंसर और एक्ट्यूएटर्स - का परिचय दिया गया है। आप इन दोनों के साथ व्यावहारिक अनुभव प्राप्त करेंगे, अपने IoT प्रोजेक्ट में एक लाइट सेंसर जोड़ेंगे, और फिर लाइट स्तरों द्वारा नियंत्रित एक LED जोड़ेंगे, जिससे एक नाइटलाइट तैयार होगा। + +इस पाठ में हम निम्नलिखित विषयों को कवर करेंगे: + +* [सेंसर क्या हैं?](../../../../../1-getting-started/lessons/3-sensors-and-actuators) +* [सेंसर का उपयोग करें](../../../../../1-getting-started/lessons/3-sensors-and-actuators) +* [सेंसर के प्रकार](../../../../../1-getting-started/lessons/3-sensors-and-actuators) +* [एक्ट्यूएटर्स क्या हैं?](../../../../../1-getting-started/lessons/3-sensors-and-actuators) +* [एक्ट्यूएटर का उपयोग करें](../../../../../1-getting-started/lessons/3-sensors-and-actuators) +* [एक्ट्यूएटर के प्रकार](../../../../../1-getting-started/lessons/3-sensors-and-actuators) + +## सेंसर क्या हैं? + +सेंसर हार्डवेयर डिवाइस हैं जो भौतिक दुनिया को महसूस करते हैं - यानी वे अपने आसपास की एक या अधिक विशेषताओं को मापते हैं और जानकारी को IoT डिवाइस तक भेजते हैं। सेंसर कई प्रकार के होते हैं क्योंकि मापने योग्य चीजें बहुत विविध होती हैं, जैसे प्राकृतिक गुण (जैसे हवा का तापमान) या भौतिक इंटरैक्शन (जैसे गति)। + +कुछ सामान्य सेंसर में शामिल हैं: + +* तापमान सेंसर - ये हवा के तापमान या जिस चीज़ में डूबे हुए हैं उसका तापमान मापते हैं। शौकिया और डेवलपर्स के लिए, ये अक्सर हवा के दबाव और आर्द्रता के साथ एक ही सेंसर में संयोजित होते हैं। +* बटन - ये तब महसूस करते हैं जब उन्हें दबाया गया हो। +* लाइट सेंसर - ये प्रकाश स्तर का पता लगाते हैं और विशिष्ट रंगों, UV प्रकाश, IR प्रकाश, या सामान्य दृश्य प्रकाश के लिए हो सकते हैं। +* कैमरे - ये दुनिया का दृश्य प्रतिनिधित्व महसूस करते हैं, जैसे कि फोटो खींचना या वीडियो स्ट्रीम करना। +* एक्सेलेरोमीटर - ये कई दिशाओं में गति का पता लगाते हैं। +* माइक्रोफोन - ये ध्वनि का पता लगाते हैं, चाहे सामान्य ध्वनि स्तर हो या दिशात्मक ध्वनि। + +✅ शोध करें। आपके फोन में कौन-कौन से सेंसर हैं? + +सभी सेंसर में एक बात समान होती है - वे जो भी महसूस करते हैं उसे एक विद्युत संकेत में बदलते हैं जिसे IoT डिवाइस द्वारा समझा जा सकता है। इस विद्युत संकेत की व्याख्या सेंसर और IoT डिवाइस के साथ संचार के लिए उपयोग किए जाने वाले प्रोटोकॉल पर निर्भर करती है। + +## सेंसर का उपयोग करें + +अपने IoT डिवाइस में सेंसर जोड़ने के लिए नीचे दिए गए संबंधित गाइड का पालन करें: + +* [Arduino - Wio Terminal](wio-terminal-sensor.md) +* [सिंगल-बोर्ड कंप्यूटर - Raspberry Pi](pi-sensor.md) +* [सिंगल-बोर्ड कंप्यूटर - वर्चुअल डिवाइस](virtual-device-sensor.md) + +## सेंसर के प्रकार + +सेंसर या तो एनालॉग होते हैं या डिजिटल। + +### एनालॉग सेंसर + +कुछ सबसे बुनियादी सेंसर एनालॉग सेंसर होते हैं। ये सेंसर IoT डिवाइस से वोल्टेज प्राप्त करते हैं, सेंसर के घटक इस वोल्टेज को समायोजित करते हैं, और सेंसर से लौटने वाले वोल्टेज को मापा जाता है ताकि सेंसर का मान प्राप्त किया जा सके। + +> 🎓 वोल्टेज यह माप है कि बिजली को एक स्थान से दूसरे स्थान तक ले जाने के लिए कितना बल है। उदाहरण के लिए, एक मानक AA बैटरी 1.5V (V वोल्ट का प्रतीक है) होती है और 1.5V के बल से अपनी सकारात्मक टर्मिनल से नकारात्मक टर्मिनल तक बिजली को धकेल सकती है। विभिन्न विद्युत हार्डवेयर को काम करने के लिए अलग-अलग वोल्टेज की आवश्यकता होती है। उदाहरण के लिए, एक LED 2-3V के बीच प्रकाश कर सकता है, लेकिन एक 100W फिलामेंट बल्ब को 240V की आवश्यकता होगी। वोल्टेज के बारे में अधिक जानकारी के लिए [वोल्टेज पर Wikipedia पेज](https://wikipedia.org/wiki/Voltage) पढ़ें। + +एक उदाहरण पोटेंशियोमीटर है। यह एक डायल है जिसे आप दो स्थितियों के बीच घुमा सकते हैं और सेंसर घुमाव को मापता है। + +![पोटेंशियोमीटर को 5 वोल्ट भेजा जा रहा है और यह 3.8 वोल्ट लौटा रहा है](../../../../../translated_images/potentiometer.35a348b9ce22f6ec1199ad37d68692d04185456ccbc2541a454bb6698be9f19c.hi.png) + +IoT डिवाइस पोटेंशियोमीटर को एक वोल्टेज, जैसे 5 वोल्ट (5V), का विद्युत संकेत भेजेगा। जैसे-जैसे पोटेंशियोमीटर समायोजित किया जाता है, यह दूसरी तरफ से निकलने वाले वोल्टेज को बदलता है। कल्पना करें कि आपके पास एक पोटेंशियोमीटर है जिसे 0 से [11](https://wikipedia.org/wiki/Up_to_eleven) तक लेबल किया गया है, जैसे कि एक एम्पलीफायर पर वॉल्यूम नॉब। जब पोटेंशियोमीटर पूरी तरह से बंद स्थिति (0) में होता है, तो 0V (0 वोल्ट) बाहर आएगा। जब यह पूरी तरह से चालू स्थिति (11) में होता है, तो 5V (5 वोल्ट) बाहर आएगा। + +> 🎓 यह एक सरलीकरण है, और आप पोटेंशियोमीटर और वेरिएबल रेसिस्टर्स के बारे में अधिक जानकारी [पोटेंशियोमीटर Wikipedia पेज](https://wikipedia.org/wiki/Potentiometer) पर पढ़ सकते हैं। + +सेंसर से निकलने वाले वोल्टेज को IoT डिवाइस द्वारा पढ़ा जाता है, और डिवाइस इसके अनुसार प्रतिक्रिया कर सकता है। सेंसर के आधार पर, यह वोल्टेज एक मनमाना मान हो सकता है या एक मानक इकाई से मेल खा सकता है। उदाहरण के लिए, एक एनालॉग तापमान सेंसर जो [थर्मिस्टर](https://wikipedia.org/wiki/Thermistor) पर आधारित है, तापमान के आधार पर अपनी प्रतिरोधकता बदलता है। आउटपुट वोल्टेज को कोड में गणनाओं द्वारा केल्विन में तापमान में और तदनुसार °C या °F में परिवर्तित किया जा सकता है। + +✅ आपका क्या विचार है कि अगर सेंसर भेजे गए वोल्टेज से अधिक वोल्टेज लौटाता है (जैसे बाहरी पावर सप्लाई से आ रहा हो) तो क्या होगा? ⛔️ इसे आज़माएं नहीं। + +#### एनालॉग से डिजिटल रूपांतरण + +IoT डिवाइस डिजिटल होते हैं - वे एनालॉग मानों के साथ काम नहीं कर सकते, वे केवल 0 और 1 के साथ काम करते हैं। इसका मतलब है कि एनालॉग सेंसर मानों को डिजिटल संकेत में परिवर्तित करने की आवश्यकता होती है ताकि उन्हें संसाधित किया जा सके। कई IoT डिवाइस में एनालॉग-टू-डिजिटल कन्वर्टर्स (ADCs) होते हैं जो एनालॉग इनपुट को उनके मान के डिजिटल प्रतिनिधित्व में परिवर्तित करते हैं। सेंसर कनेक्टर बोर्ड के माध्यम से ADCs के साथ भी काम कर सकते हैं। उदाहरण के लिए, Seeed Grove इकोसिस्टम में Raspberry Pi के साथ, एनालॉग सेंसर 'हैट' के विशिष्ट पोर्ट्स से जुड़ते हैं जो Pi के GPIO पिन्स से जुड़े होते हैं, और इस हैट में एक ADC होता है जो वोल्टेज को डिजिटल संकेत में परिवर्तित करता है जिसे Pi के GPIO पिन्स से भेजा जा सकता है। + +कल्पना करें कि आपके पास एक एनालॉग लाइट सेंसर है जो 3.3V पर IoT डिवाइस से जुड़ा है और 1V का मान लौटा रहा है। यह 1V डिजिटल दुनिया में कुछ भी नहीं दर्शाता है, इसलिए इसे परिवर्तित करने की आवश्यकता है। वोल्टेज को डिवाइस और सेंसर के आधार पर एक पैमाने का उपयोग करके एनालॉग मान में परिवर्तित किया जाएगा। उदाहरण के लिए, Seeed Grove लाइट सेंसर 0 से 1,023 तक मान लौटाता है। इस सेंसर के लिए जो 3.3V पर चल रहा है, 1V आउटपुट का मान 300 होगा। IoT डिवाइस 300 को एनालॉग मान के रूप में संभाल नहीं सकता, इसलिए इस मान को `0000000100101100`, Grove हैट द्वारा 300 का बाइनरी प्रतिनिधित्व, में परिवर्तित किया जाएगा। फिर इसे IoT डिवाइस द्वारा संसाधित किया जाएगा। + +✅ यदि आप बाइनरी नहीं जानते हैं, तो 0 और 1 द्वारा संख्याओं को कैसे दर्शाया जाता है, यह जानने के लिए थोड़ा शोध करें। [BBC Bitesize का बाइनरी पर परिचय पाठ](https://www.bbc.co.uk/bitesize/guides/zwsbwmn/revision/1) शुरू करने के लिए एक शानदार जगह है। + +कोडिंग के दृष्टिकोण से, यह सब आमतौर पर सेंसर के साथ आने वाले लाइब्रेरी द्वारा संभाला जाता है, इसलिए आपको इस रूपांतरण की चिंता करने की आवश्यकता नहीं है। Grove लाइट सेंसर के लिए आप Python लाइब्रेरी का उपयोग करेंगे और `light` प्रॉपर्टी को कॉल करेंगे, या Arduino लाइब्रेरी का उपयोग करेंगे और `analogRead` को कॉल करेंगे ताकि 300 का मान प्राप्त हो सके। + +### डिजिटल सेंसर + +डिजिटल सेंसर, एनालॉग सेंसर की तरह, विद्युत वोल्टेज में बदलाव का उपयोग करके अपने आसपास की दुनिया का पता लगाते हैं। फर्क यह है कि वे डिजिटल संकेत आउटपुट करते हैं, या तो केवल दो अवस्थाओं को मापकर या एक अंतर्निहित ADC का उपयोग करके। डिजिटल सेंसर अधिक से अधिक सामान्य हो रहे हैं ताकि कनेक्टर बोर्ड या IoT डिवाइस में ADC का उपयोग करने की आवश्यकता न हो। + +सबसे सरल डिजिटल सेंसर एक बटन या स्विच है। यह एक सेंसर है जिसमें दो अवस्थाएँ होती हैं, चालू या बंद। + +![एक बटन को 5 वोल्ट भेजा जा रहा है। जब दबाया नहीं जाता तो यह 0 वोल्ट लौटाता है, और जब दबाया जाता है तो यह 5 वोल्ट लौटाता है](../../../../../translated_images/button.eadb560b77ac45e56f523d9d8876e40444f63b419e33eb820082d461fa79490b.hi.png) + +IoT डिवाइस के पिन्स जैसे GPIO पिन्स इस संकेत को सीधे 0 या 1 के रूप में माप सकते हैं। यदि भेजा गया वोल्टेज लौटाए गए वोल्टेज के समान है, तो पढ़ा गया मान 1 होता है, अन्यथा पढ़ा गया मान 0 होता है। संकेत को परिवर्तित करने की आवश्यकता नहीं होती, यह केवल 1 या 0 हो सकता है। + +> 💁 वोल्टेज कभी भी सटीक नहीं होते, खासकर क्योंकि सेंसर के घटकों में कुछ प्रतिरोध होता है, इसलिए आमतौर पर एक सहनशीलता होती है। उदाहरण के लिए, Raspberry Pi के GPIO पिन्स 3.3V पर काम करते हैं, और 1.8V से ऊपर के लौटाए गए संकेत को 1 के रूप में पढ़ते हैं, और 1.8V से नीचे के संकेत को 0 के रूप में पढ़ते हैं। + +* 3.3V बटन में जाता है। बटन बंद है इसलिए 0V बाहर आता है, जिससे मान 0 मिलता है। +* 3.3V बटन में जाता है। बटन चालू है इसलिए 3.3V बाहर आता है, जिससे मान 1 मिलता है। + +अधिक उन्नत डिजिटल सेंसर एनालॉग मानों को पढ़ते हैं, फिर उन्हें ऑन-बोर्ड ADCs का उपयोग करके डिजिटल संकेतों में परिवर्तित करते हैं। उदाहरण के लिए, एक डिजिटल तापमान सेंसर अभी भी एनालॉग सेंसर की तरह थर्मोकपल का उपयोग करेगा, और वर्तमान तापमान पर थर्मोकपल के प्रतिरोध के कारण वोल्टेज में बदलाव को मापेगा। एनालॉग मान लौटाने और डिवाइस या कनेक्टर बोर्ड पर डिजिटल संकेत में परिवर्तित होने पर निर्भर रहने के बजाय, सेंसर में निर्मित ADC मान को परिवर्तित करेगा और इसे 0 और 1 की श्रृंखला के रूप में IoT डिवाइस को भेजेगा। ये 0 और 1 उसी तरह भेजे जाते हैं जैसे बटन के डिजिटल संकेत के लिए, जिसमें 1 पूर्ण वोल्टेज और 0 0V होता है। + +![एक डिजिटल तापमान सेंसर एनालॉग रीडिंग को बाइनरी डेटा में परिवर्तित कर रहा है, जिसमें 0 0 वोल्ट और 1 5 वोल्ट है, और इसे IoT डिवाइस को भेज रहा है](../../../../../translated_images/temperature-as-digital.85004491b977bae1129707df107c0b19fe6fc6374210e9027e04acb34a640c78.hi.png) + +डिजिटल डेटा भेजने से सेंसर अधिक जटिल हो सकते हैं और अधिक विस्तृत डेटा भेज सकते हैं, यहां तक कि सुरक्षित सेंसर के लिए एन्क्रिप्टेड डेटा भी। एक उदाहरण कैमरा है। यह एक सेंसर है जो एक छवि को कैप्चर करता है और इसे डिजिटल डेटा के रूप में भेजता है जिसमें वह छवि होती है, आमतौर पर JPEG जैसे संपीड़ित प्रारूप में, जिसे IoT डिवाइस द्वारा पढ़ा जा सकता है। यह वीडियो को स्ट्रीम भी कर सकता है, छवियों को कैप्चर करके और या तो पूरी छवि फ्रेम दर फ्रेम भेजकर या संपीड़ित वीडियो स्ट्रीम भेजकर। + +## एक्ट्यूएटर्स क्या हैं? + +एक्ट्यूएटर्स सेंसर के विपरीत होते हैं - वे आपके IoT डिवाइस से विद्युत संकेत को भौतिक दुनिया के साथ इंटरैक्शन में बदलते हैं, जैसे कि प्रकाश या ध्वनि उत्सर्जित करना, या मोटर को घुमाना। + +कुछ सामान्य एक्ट्यूएटर्स में शामिल हैं: + +* LED - ये चालू होने पर प्रकाश उत्सर्जित करते हैं। +* स्पीकर - ये भेजे गए संकेत के आधार पर ध्वनि उत्सर्जित करते हैं, एक साधारण बज़र से लेकर संगीत चलाने वाले ऑडियो स्पीकर तक। +* स्टेपर मोटर - ये संकेत को परिभाषित मात्रा में घुमाव में बदलते हैं, जैसे कि डायल को 90° घुमाना। +* रिले - ये स्विच होते हैं जिन्हें विद्युत संकेत द्वारा चालू या बंद किया जा सकता है। ये IoT डिवाइस से छोटे वोल्टेज को बड़े वोल्टेज चालू करने की अनुमति देते हैं। +* स्क्रीन - ये अधिक जटिल एक्ट्यूएटर्स होते हैं और मल्टी-सेगमेंट डिस्प्ले पर जानकारी दिखाते हैं। स्क्रीन साधारण LED डिस्प्ले से लेकर उच्च-रिज़ॉल्यूशन वीडियो मॉनिटर तक भिन्न होती हैं। + +✅ शोध करें। आपके फोन में कौन-कौन से एक्ट्यूएटर्स हैं? + +## एक्ट्यूएटर का उपयोग करें + +नीचे दिए गए संबंधित गाइड का पालन करें ताकि सेंसर द्वारा नियंत्रित एक्ट्यूएटर को अपने IoT डिवाइस में जोड़ सकें और IoT नाइटलाइट बना सकें। यह लाइट सेंसर से प्रकाश स्तरों को एकत्र करेगा और जब पता लगाया गया प्रकाश स्तर बहुत कम होगा तो LED के रूप में एक्ट्यूएटर का उपयोग करके प्रकाश उत्सर्जित करेगा। + +![असाइनमेंट का फ्लो चार्ट, जिसमें प्रकाश स्तरों को पढ़ा और जांचा जा रहा है, और LED को नियंत्रित किया जा रहा है](../../../../../translated_images/assignment-1-flow.7552a51acb1a5ec858dca6e855cdbb44206434006df8ba3799a25afcdab1665d.hi.png) + +* [Arduino - Wio Terminal](wio-terminal-actuator.md) +* [सिंगल-बोर्ड कंप्यूटर - Raspberry Pi](pi-actuator.md) +* [सिंगल-बोर्ड कंप्यूटर - वर्चुअल डिवाइस](virtual-device-actuator.md) + +## एक्ट्यूएटर के प्रकार + +सेंसर की तरह, एक्ट्यूएटर या तो एनालॉग होते हैं या डिजिटल। + +### एनालॉग एक्ट्यूएटर + +एनालॉग एक्ट्यूएटर एक एनालॉग संकेत लेते हैं और इसे किसी प्रकार के इंटरैक्शन में बदलते हैं, जहां इंटरैक्शन आपूर्ति किए गए वोल्टेज के आधार पर बदलता है। + +एक उदाहरण एक डिमेबल लाइट है, जैसे कि आपके घर में हो सकती है। लाइट को आपूर्ति किए गए वोल्टेज की मात्रा यह निर्धारित करती है कि यह कितनी उज्ज्वल है। +![कम वोल्टेज पर हल्की रोशनी और उच्च वोल्टेज पर तेज रोशनी](../../../../../translated_images/dimmable-light.9ceffeb195dec1a849da718b2d71b32c35171ff7dfea9c07bbf82646a67acf6b.hi.png) + +सेंसर की तरह, असली IoT डिवाइस डिजिटल सिग्नल पर काम करता है, एनालॉग पर नहीं। इसका मतलब है कि एनालॉग सिग्नल भेजने के लिए, IoT डिवाइस को डिजिटल से एनालॉग कनवर्टर (DAC) की आवश्यकता होती है, जो या तो सीधे IoT डिवाइस पर या कनेक्टर बोर्ड पर होता है। यह IoT डिवाइस से 0s और 1s को एनालॉग वोल्टेज में बदल देगा जिसे एक्टुएटर उपयोग कर सकता है। + +✅ आपका क्या विचार है कि अगर IoT डिवाइस एक्टुएटर की क्षमता से अधिक वोल्टेज भेजता है तो क्या होगा? +⛔️ इसे आजमाने की कोशिश न करें। + +#### पल्स-वाइड्थ मॉड्यूलेशन + +IoT डिवाइस से डिजिटल सिग्नल को एनालॉग सिग्नल में बदलने का एक और विकल्प पल्स-वाइड्थ मॉड्यूलेशन है। इसमें बहुत सारे छोटे डिजिटल पल्स भेजे जाते हैं जो ऐसा व्यवहार करते हैं जैसे यह एनालॉग सिग्नल हो। + +उदाहरण के लिए, आप PWM का उपयोग मोटर की गति को नियंत्रित करने के लिए कर सकते हैं। + +कल्पना करें कि आप 5V सप्लाई के साथ एक मोटर को नियंत्रित कर रहे हैं। आप अपनी मोटर को एक छोटा पल्स भेजते हैं, वोल्टेज को 0.02 सेकंड (0.02s) के लिए उच्च (5V) पर स्विच करते हैं। इस समय में आपकी मोटर एक-दसवें घुमाव, या 36° तक घूम सकती है। फिर सिग्नल 0.02 सेकंड (0.02s) के लिए रुकता है, एक निम्न सिग्नल (0V) भेजता है। ऑन और ऑफ का प्रत्येक चक्र 0.04 सेकंड तक रहता है। फिर चक्र दोहराता है। + +![150 RPM पर मोटर का पल्स-वाइड्थ मॉड्यूलेशन घुमाव](../../../../../translated_images/pwm-motor-150rpm.83347ac04ca38482bd120939b133803963c9c15ca9d8d484712a4bd92820f6a4.hi.png) + +इसका मतलब है कि एक सेकंड में आपके पास 0.02s के 25 5V पल्स हैं जो मोटर को घुमाते हैं, प्रत्येक के बाद 0.02s का 0V का विराम होता है जो मोटर को नहीं घुमाता। प्रत्येक पल्स मोटर को एक-दसवें घुमाव तक घुमाता है, जिसका मतलब है कि मोटर प्रति सेकंड 2.5 घुमाव पूरा करती है। आपने डिजिटल सिग्नल का उपयोग करके मोटर को प्रति सेकंड 2.5 घुमाव, या 150 [रेवोल्यूशन्स प्रति मिनट](https://wikipedia.org/wiki/Revolutions_per_minute) (घुमाव की गति का एक गैर-मानक माप) पर घुमाया। + +```output +25 pulses per second x 0.1 rotations per pulse = 2.5 rotations per second +2.5 rotations per second x 60 seconds in a minute = 150rpm +``` + +> 🎓 जब एक PWM सिग्नल आधे समय के लिए ऑन और आधे समय के लिए ऑफ होता है, तो इसे [50% ड्यूटी साइकिल](https://wikipedia.org/wiki/Duty_cycle) कहा जाता है। ड्यूटी साइकिल को सिग्नल के ऑन स्टेट के समय की तुलना में ऑफ स्टेट के समय के प्रतिशत के रूप में मापा जाता है। + +![75 RPM पर मोटर का पल्स-वाइड्थ मॉड्यूलेशन घुमाव](../../../../../translated_images/pwm-motor-75rpm.a5e4c939934b6e14fd9e98e4f2c9539d723da2b18f490eae0948dd044d18ff7e.hi.png) + +आप पल्स का आकार बदलकर मोटर की गति बदल सकते हैं। उदाहरण के लिए, उसी मोटर के साथ आप 0.04s के समान चक्र समय रख सकते हैं, ऑन पल्स को आधा कर 0.01s कर सकते हैं, और ऑफ पल्स को बढ़ाकर 0.03s कर सकते हैं। आपके पास प्रति सेकंड समान संख्या में पल्स (25) हैं, लेकिन प्रत्येक ऑन पल्स की लंबाई आधी है। आधी लंबाई का पल्स मोटर को एक-बीसवें घुमाव तक ही घुमाता है, और 25 पल्स प्रति सेकंड पर मोटर प्रति सेकंड 1.25 घुमाव या 75rpm पूरा करेगी। डिजिटल सिग्नल की पल्स गति बदलकर आपने एनालॉग मोटर की गति को आधा कर दिया। + +```output +25 pulses per second x 0.05 rotations per pulse = 1.25 rotations per second +1.25 rotations per second x 60 seconds in a minute = 75rpm +``` + +✅ आप मोटर के घुमाव को कैसे स्मूथ रखेंगे, खासकर कम गति पर? क्या आप लंबे विराम के साथ कुछ लंबे पल्स का उपयोग करेंगे या बहुत छोटे विराम के साथ बहुत छोटे पल्स का उपयोग करेंगे? + +> 💁 कुछ सेंसर भी एनालॉग सिग्नल को डिजिटल सिग्नल में बदलने के लिए PWM का उपयोग करते हैं। + +> 🎓 आप पल्स-वाइड्थ मॉड्यूलेशन के बारे में अधिक जानकारी [विकिपीडिया के पल्स-वाइड्थ मॉड्यूलेशन पेज](https://wikipedia.org/wiki/Pulse-width_modulation) पर पढ़ सकते हैं। + +### डिजिटल एक्टुएटर + +डिजिटल एक्टुएटर, जैसे डिजिटल सेंसर, या तो उच्च या निम्न वोल्टेज द्वारा नियंत्रित दो स्टेट्स में होते हैं या उनमें एक DAC होता है जो डिजिटल सिग्नल को एनालॉग में बदल सकता है। + +एक साधारण डिजिटल एक्टुएटर LED है। जब डिवाइस 1 का डिजिटल सिग्नल भेजता है, तो एक उच्च वोल्टेज भेजा जाता है जो LED को जलाता है। जब 0 का डिजिटल सिग्नल भेजा जाता है, तो वोल्टेज 0V तक गिर जाता है और LED बंद हो जाती है। + +![0 वोल्ट पर LED बंद और 5V पर चालू](../../../../../translated_images/led.ec6d94f66676a174ad06d9fa9ea49c2ee89beb18b312d5c6476467c66375b07f.hi.png) + +✅ आप और कौन से साधारण 2-स्टेट एक्टुएटर के बारे में सोच सकते हैं? एक उदाहरण है सोलोनॉइड, जो एक इलेक्ट्रोमैग्नेट है जिसे दरवाजे की कुंडी को लॉक/अनलॉक करने जैसे काम करने के लिए सक्रिय किया जा सकता है। + +अधिक उन्नत डिजिटल एक्टुएटर, जैसे स्क्रीन, डिजिटल डेटा को निश्चित प्रारूपों में भेजने की आवश्यकता होती है। वे आमतौर पर लाइब्रेरी के साथ आते हैं जो उन्हें नियंत्रित करने के लिए सही डेटा भेजना आसान बनाते हैं। + +--- + +## 🚀 चुनौती + +पिछले दो पाठों में चुनौती थी कि आप अपने घर, स्कूल या कार्यस्थल में जितने IoT डिवाइस हैं, उनकी सूची बनाएं और तय करें कि वे माइक्रोकंट्रोलर या सिंगल-बोर्ड कंप्यूटर, या दोनों के मिश्रण पर आधारित हैं। + +आपने जो भी डिवाइस सूचीबद्ध किए हैं, वे किन सेंसर और एक्टुएटर से जुड़े हैं? इन डिवाइस से जुड़े प्रत्येक सेंसर और एक्टुएटर का उद्देश्य क्या है? + +## पोस्ट-लेक्चर क्विज़ + +[पोस्ट-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/6) + +## समीक्षा और स्व-अध्ययन + +* [ThingLearn](http://thinglearn.jenlooper.com/curriculum/) पर बिजली और सर्किट के बारे में पढ़ें। +* [Seeed Studios Temperature Sensors guide](https://www.seeedstudio.com/blog/2019/10/14/temperature-sensors-for-arduino-projects/) पर विभिन्न प्रकार के तापमान सेंसर के बारे में पढ़ें। +* [विकिपीडिया LED पेज](https://wikipedia.org/wiki/Light-emitting_diode) पर LED के बारे में पढ़ें। + +## असाइनमेंट + +[सेंसर और एक्टुएटर पर शोध करें](assignment.md) + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/assignment.md b/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/assignment.md new file mode 100644 index 00000000..78db2375 --- /dev/null +++ b/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/assignment.md @@ -0,0 +1,29 @@ + +# सेंसर और एक्ट्यूएटर्स पर शोध + +## निर्देश + +इस पाठ में सेंसर और एक्ट्यूएटर्स के बारे में बताया गया। एक सेंसर और एक एक्ट्यूएटर पर शोध करें और उनका वर्णन करें, जिन्हें IoT डेव किट के साथ उपयोग किया जा सकता है, जिसमें शामिल हो: + +* यह क्या करता है +* इसके अंदर उपयोग किए गए इलेक्ट्रॉनिक्स/हार्डवेयर +* यह एनालॉग है या डिजिटल +* इनपुट या माप की इकाइयाँ और रेंज क्या है + +## मूल्यांकन मानदंड + +| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | +| -------- | --------- | -------- | ----------------- | +| सेंसर का वर्णन करें | सेंसर का वर्णन किया गया, जिसमें ऊपर सूचीबद्ध सभी 4 अनुभागों के लिए विवरण शामिल हैं। | सेंसर का वर्णन किया गया, लेकिन केवल ऊपर दिए गए 2-3 अनुभागों की जानकारी दी गई। | सेंसर का वर्णन किया गया, लेकिन केवल ऊपर दिए गए 1 अनुभाग की जानकारी दी गई। | +| एक्ट्यूएटर का वर्णन करें | एक्ट्यूएटर का वर्णन किया गया, जिसमें ऊपर सूचीबद्ध सभी 4 अनुभागों के लिए विवरण शामिल हैं। | एक्ट्यूएटर का वर्णन किया गया, लेकिन केवल ऊपर दिए गए 2-3 अनुभागों की जानकारी दी गई। | एक्ट्यूएटर का वर्णन किया गया, लेकिन केवल ऊपर दिए गए 1 अनुभाग की जानकारी दी गई। | + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md b/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md new file mode 100644 index 00000000..72479440 --- /dev/null +++ b/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md @@ -0,0 +1,128 @@ + +# रास्पबेरी पाई के साथ नाइटलाइट बनाएं + +इस पाठ के इस भाग में, आप अपने रास्पबेरी पाई में एक एलईडी जोड़ेंगे और इसका उपयोग नाइटलाइट बनाने के लिए करेंगे। + +## हार्डवेयर + +अब नाइटलाइट को एक एक्टुएटर की आवश्यकता है। + +एक्टुएटर एक **एलईडी** है, एक [लाइट-एमिटिंग डायोड](https://wikipedia.org/wiki/Light-emitting_diode) जो तब प्रकाश उत्सर्जित करता है जब उसमें से करंट गुजरता है। यह एक डिजिटल एक्टुएटर है जिसके दो स्टेट्स होते हैं, चालू और बंद। 1 का मान भेजने से एलईडी चालू हो जाती है, और 0 का मान भेजने से यह बंद हो जाती है। एलईडी एक बाहरी ग्रोव एक्टुएटर है और इसे रास्पबेरी पाई पर ग्रोव बेस हैट से जोड़ा जाना चाहिए। + +नाइटलाइट लॉजिक का छद्म-कोड इस प्रकार है: + +```output +Check the light level. +If the light is less than 300 + Turn the LED on +Otherwise + Turn the LED off +``` + +### एलईडी को कनेक्ट करें + +ग्रोव एलईडी एक मॉड्यूल के रूप में आती है जिसमें विभिन्न रंगों की एलईडी होती हैं, जिससे आप अपना पसंदीदा रंग चुन सकते हैं। + +#### कार्य - एलईडी को कनेक्ट करें + +एलईडी को कनेक्ट करें। + +![एक ग्रोव एलईडी](../../../../../translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.hi.png) + +1. अपनी पसंदीदा एलईडी चुनें और उसके पिन्स को एलईडी मॉड्यूल के दो छेदों में डालें। + + एलईडी लाइट-एमिटिंग डायोड्स हैं, और डायोड्स ऐसे इलेक्ट्रॉनिक उपकरण हैं जो करंट को केवल एक दिशा में प्रवाहित कर सकते हैं। इसका मतलब है कि एलईडी को सही दिशा में जोड़ा जाना चाहिए, अन्यथा यह काम नहीं करेगी। + + एलईडी के एक पिन को पॉजिटिव पिन और दूसरे को नेगेटिव पिन कहा जाता है। एलईडी पूरी तरह से गोल नहीं होती और एक तरफ से थोड़ी चपटी होती है। चपटी तरफ नेगेटिव पिन होती है। जब आप एलईडी को मॉड्यूल से जोड़ते हैं, तो सुनिश्चित करें कि गोलाई वाली तरफ का पिन मॉड्यूल के बाहरी हिस्से पर **+** चिह्नित सॉकेट से जुड़ा हो, और चपटी तरफ का पिन मॉड्यूल के बीच के करीब वाले सॉकेट से जुड़ा हो। + +1. एलईडी मॉड्यूल में एक स्पिन बटन होता है जो आपको ब्राइटनेस को नियंत्रित करने की अनुमति देता है। इसे शुरू में पूरी तरह से बढ़ा दें, इसे छोटे फिलिप्स हेड स्क्रूड्राइवर का उपयोग करके जितना हो सके एंटी-क्लॉकवाइज घुमाएं। + +1. ग्रोव केबल के एक सिरे को एलईडी मॉड्यूल के सॉकेट में डालें। यह केवल एक ही दिशा में जाएगा। + +1. रास्पबेरी पाई को बंद करके, ग्रोव केबल के दूसरे सिरे को ग्रोव बेस हैट पर **D5** चिह्नित डिजिटल सॉकेट में कनेक्ट करें। यह सॉकेट GPIO पिन्स के पास वाले सॉकेट्स की पंक्ति में बाईं ओर से दूसरा है। + +![ग्रोव एलईडी D5 सॉकेट से जुड़ी हुई](../../../../../translated_images/pi-led.97f1d474981dc35d1c7996c7b17de355d3d0a6bc9606d79fa5f89df933415122.hi.png) + +## नाइटलाइट को प्रोग्राम करें + +अब नाइटलाइट को ग्रोव लाइट सेंसर और ग्रोव एलईडी का उपयोग करके प्रोग्राम किया जा सकता है। + +### कार्य - नाइटलाइट को प्रोग्राम करें + +नाइटलाइट को प्रोग्राम करें। + +1. पाई को चालू करें और इसके बूट होने का इंतजार करें। + +1. VS कोड में नाइटलाइट प्रोजेक्ट खोलें जिसे आपने इस असाइनमेंट के पिछले भाग में बनाया था, चाहे वह सीधे पाई पर चल रहा हो या रिमोट SSH एक्सटेंशन का उपयोग करके कनेक्ट किया गया हो। + +1. `app.py` फ़ाइल में निम्नलिखित कोड जोड़ें ताकि आवश्यक लाइब्रेरी को इंपोर्ट किया जा सके। इसे अन्य `import` लाइनों के नीचे, सबसे ऊपर जोड़ा जाना चाहिए। + + ```python + from grove.grove_led import GroveLed + ``` + + `from grove.grove_led import GroveLed` स्टेटमेंट ग्रोव पायथन लाइब्रेरी से `GroveLed` को इंपोर्ट करता है। इस लाइब्रेरी में ग्रोव एलईडी के साथ इंटरैक्ट करने के लिए कोड होता है। + +1. `light_sensor` डिक्लेरेशन के बाद निम्नलिखित कोड जोड़ें ताकि एलईडी को मैनेज करने वाले क्लास का एक इंस्टेंस बनाया जा सके: + + ```python + led = GroveLed(5) + ``` + + लाइन `led = GroveLed(5)` `GroveLed` क्लास का एक इंस्टेंस बनाती है जो पिन **D5** से कनेक्ट होता है - डिजिटल ग्रोव पिन जिससे एलईडी जुड़ी हुई है। + + > 💁 सभी सॉकेट्स के पास यूनिक पिन नंबर होते हैं। पिन्स 0, 2, 4, और 6 एनालॉग पिन्स हैं, और पिन्स 5, 16, 18, 22, 24, और 26 डिजिटल पिन्स हैं। + +1. `while` लूप के अंदर और `time.sleep` से पहले एक चेक जोड़ें ताकि लाइट लेवल्स की जांच की जा सके और एलईडी को चालू या बंद किया जा सके: + + ```python + if light < 300: + led.on() + else: + led.off() + ``` + + यह कोड `light` वैल्यू की जांच करता है। यदि यह 300 से कम है, तो यह `GroveLed` क्लास के `on` मेथड को कॉल करता है, जो एलईडी को चालू करने के लिए डिजिटल वैल्यू 1 भेजता है। यदि लाइट वैल्यू 300 या उससे अधिक है, तो यह `off` मेथड को कॉल करता है, जो डिजिटल वैल्यू 0 भेजता है, जिससे एलईडी बंद हो जाती है। + + > 💁 यह कोड `print('Light level:', light)` लाइन के समान इंडेंटेड होना चाहिए ताकि यह `while` लूप के अंदर हो! + + > 💁 एक्टुएटर्स को डिजिटल वैल्यू भेजते समय, 0 वैल्यू 0V होती है, और 1 वैल्यू डिवाइस के लिए अधिकतम वोल्टेज होती है। रास्पबेरी पाई के साथ ग्रोव सेंसर और एक्टुएटर्स के लिए, 1 वोल्टेज 3.3V है। + +1. VS कोड टर्मिनल से, अपना पायथन ऐप चलाने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + python3 app.py + ``` + + लाइट वैल्यू कंसोल पर आउटपुट होगी। + + ```output + pi@raspberrypi:~/nightlight $ python3 app.py + Light level: 634 + Light level: 634 + Light level: 634 + Light level: 230 + Light level: 104 + Light level: 290 + ``` + +1. लाइट सेंसर को ढकें और हटाएं। ध्यान दें कि यदि लाइट लेवल 300 या उससे कम है तो एलईडी जल जाएगी, और जब लाइट लेवल 300 से अधिक होगा तो यह बंद हो जाएगी। + + > 💁 यदि एलईडी चालू नहीं होती है, तो सुनिश्चित करें कि यह सही दिशा में जुड़ी हुई है, और स्पिन बटन पूरी तरह से चालू पर सेट है। + +![लाइट लेवल बदलने पर पाई से जुड़ी एलईडी चालू और बंद होती हुई](../../../../../images/pi-running-assignment-1-1.gif) + +> 💁 आप इस कोड को [code-actuator/pi](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-actuator/pi) फोल्डर में पा सकते हैं। + +😀 आपका नाइटलाइट प्रोग्राम सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/pi-sensor.md b/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/pi-sensor.md new file mode 100644 index 00000000..2c32af38 --- /dev/null +++ b/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/pi-sensor.md @@ -0,0 +1,108 @@ + +# नाइटलाइट बनाएं - रास्पबेरी पाई + +इस पाठ के इस भाग में, आप अपने रास्पबेरी पाई में एक लाइट सेंसर जोड़ेंगे। + +## हार्डवेयर + +इस पाठ के लिए सेंसर एक **लाइट सेंसर** है जो [फोटोडायोड](https://wikipedia.org/wiki/Photodiode) का उपयोग करके प्रकाश को विद्युत संकेत में बदलता है। यह एक एनालॉग सेंसर है जो 0 से 1,000 तक का पूर्णांक मान भेजता है, जो प्रकाश की सापेक्ष मात्रा को दर्शाता है। यह किसी मानक माप इकाई जैसे [लक्स](https://wikipedia.org/wiki/Lux) से मेल नहीं खाता। + +लाइट सेंसर एक बाहरी Grove सेंसर है और इसे रास्पबेरी पाई पर Grove Base हैट से जोड़ा जाना चाहिए। + +### लाइट सेंसर को कनेक्ट करें + +प्रकाश स्तरों का पता लगाने के लिए उपयोग किया जाने वाला Grove लाइट सेंसर रास्पबेरी पाई से जोड़ा जाना चाहिए। + +#### कार्य - लाइट सेंसर को कनेक्ट करें + +लाइट सेंसर को कनेक्ट करें। + +![एक Grove लाइट सेंसर](../../../../../translated_images/grove-light-sensor.b8127b7c434e632d6bcdb57587a14e9ef69a268a22df95d08628f62b8fa5505c.hi.png) + +1. Grove केबल के एक सिरे को लाइट सेंसर मॉड्यूल के सॉकेट में डालें। यह केवल एक ही दिशा में जाएगा। + +1. रास्पबेरी पाई को बंद करके, Grove केबल के दूसरे सिरे को Grove Base हैट पर **A0** नामक एनालॉग सॉकेट में कनेक्ट करें। यह सॉकेट GPIO पिन के पास वाले सॉकेट की पंक्ति में दाईं ओर से दूसरा है। + +![सॉकेट A0 से जुड़ा Grove लाइट सेंसर](../../../../../translated_images/pi-light-sensor.66cc1e31fa48cd7d5f23400d4b2119aa41508275cb7c778053a7923b4e972d7e.hi.png) + +## लाइट सेंसर को प्रोग्राम करें + +अब डिवाइस को Grove लाइट सेंसर का उपयोग करके प्रोग्राम किया जा सकता है। + +### कार्य - लाइट सेंसर को प्रोग्राम करें + +डिवाइस को प्रोग्राम करें। + +1. पाई को चालू करें और इसके बूट होने की प्रतीक्षा करें। + +1. VS Code में नाइटलाइट प्रोजेक्ट खोलें जिसे आपने इस असाइनमेंट के पिछले भाग में बनाया था, या तो सीधे पाई पर चलाकर या Remote SSH एक्सटेंशन का उपयोग करके कनेक्ट करें। + +1. `app.py` फ़ाइल खोलें और उसमें से सभी कोड हटा दें। + +1. `app.py` फ़ाइल में निम्नलिखित कोड जोड़ें ताकि कुछ आवश्यक लाइब्रेरी आयात की जा सकें: + + ```python + import time + from grove.grove_light_sensor_v1_2 import GroveLightSensor + ``` + + `import time` स्टेटमेंट `time` मॉड्यूल को आयात करता है, जिसका उपयोग इस असाइनमेंट में बाद में किया जाएगा। + + `from grove.grove_light_sensor_v1_2 import GroveLightSensor` स्टेटमेंट Grove Python लाइब्रेरी से `GroveLightSensor` आयात करता है। इस लाइब्रेरी में Grove लाइट सेंसर के साथ इंटरैक्ट करने के लिए कोड है, और इसे पाई सेटअप के दौरान ग्लोबली इंस्टॉल किया गया था। + +1. ऊपर दिए गए कोड के बाद निम्नलिखित कोड जोड़ें ताकि लाइट सेंसर को प्रबंधित करने वाले क्लास का एक इंस्टेंस बनाया जा सके: + + ```python + light_sensor = GroveLightSensor(0) + ``` + + लाइन `light_sensor = GroveLightSensor(0)` GroveLightSensor क्लास का एक इंस्टेंस बनाता है जो पिन **A0** से जुड़ा है - एनालॉग Grove पिन जिससे लाइट सेंसर जुड़ा हुआ है। + +1. ऊपर दिए गए कोड के बाद एक अनंत लूप जोड़ें ताकि लाइट सेंसर का मान पोल किया जा सके और इसे कंसोल पर प्रिंट किया जा सके: + + ```python + while True: + light = light_sensor.light + print('Light level:', light) + ``` + + यह GroveLightSensor क्लास की `light` प्रॉपर्टी का उपयोग करके 0-1,023 के पैमाने पर वर्तमान प्रकाश स्तर को पढ़ेगा। यह प्रॉपर्टी पिन से एनालॉग मान पढ़ती है। यह मान फिर कंसोल पर प्रिंट किया जाता है। + +1. लूप के अंत में एक सेकंड की छोटी नींद जोड़ें क्योंकि प्रकाश स्तरों को लगातार जांचने की आवश्यकता नहीं है। नींद डिवाइस की पावर खपत को कम करती है। + + ```python + time.sleep(1) + ``` + +1. VS Code टर्मिनल से, निम्नलिखित चलाएं ताकि आपका Python ऐप चल सके: + + ```sh + python3 app.py + ``` + + प्रकाश मान कंसोल पर आउटपुट होंगे। लाइट सेंसर को ढकें और हटाएं, और मान बदलेंगे: + + ```output + pi@raspberrypi:~/nightlight $ python3 app.py + Light level: 634 + Light level: 634 + Light level: 634 + Light level: 230 + Light level: 104 + Light level: 290 + ``` + +> 💁 आप इस कोड को [code-sensor/pi](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-sensor/pi) फ़ोल्डर में पा सकते हैं। + +😀 आपके नाइटलाइट प्रोग्राम में सेंसर जोड़ना सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-actuator.md b/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-actuator.md new file mode 100644 index 00000000..e41f5a9f --- /dev/null +++ b/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-actuator.md @@ -0,0 +1,122 @@ + +# नाइटलाइट बनाएं - वर्चुअल IoT हार्डवेयर + +इस पाठ के इस भाग में, आप अपने वर्चुअल IoT डिवाइस में एक LED जोड़ेंगे और इसका उपयोग नाइटलाइट बनाने के लिए करेंगे। + +## वर्चुअल हार्डवेयर + +नाइटलाइट को एक एक्टुएटर की आवश्यकता होती है, जिसे CounterFit ऐप में बनाया गया है। + +यह एक्टुएटर एक **LED** है। एक भौतिक IoT डिवाइस में, यह एक [लाइट-एमिटिंग डायोड](https://wikipedia.org/wiki/Light-emitting_diode) होगा जो करंट प्रवाहित होने पर प्रकाश उत्सर्जित करता है। यह एक डिजिटल एक्टुएटर है जिसके दो स्टेट्स होते हैं, ऑन और ऑफ। 1 का मान भेजने पर LED ऑन हो जाती है, और 0 भेजने पर ऑफ हो जाती है। + +नाइटलाइट लॉजिक का छद्म-कोड: + +```output +Check the light level. +If the light is less than 300 + Turn the LED on +Otherwise + Turn the LED off +``` + +### CounterFit में एक्टुएटर जोड़ें + +वर्चुअल LED का उपयोग करने के लिए, आपको इसे CounterFit ऐप में जोड़ना होगा। + +#### कार्य - CounterFit में एक्टुएटर जोड़ें + +CounterFit ऐप में LED जोड़ें। + +1. सुनिश्चित करें कि CounterFit वेब ऐप पिछले असाइनमेंट के भाग से चल रहा है। यदि नहीं, तो इसे शुरू करें और लाइट सेंसर को फिर से जोड़ें। + +1. एक LED बनाएं: + + 1. *Actuator* पैन में *Create actuator* बॉक्स में, *Actuator type* ड्रॉपडाउन करें और *LED* चुनें। + + 1. *Pin* को *5* पर सेट करें। + + 1. **Add** बटन चुनें ताकि Pin 5 पर LED बनाई जा सके। + + ![LED सेटिंग्स](../../../../../translated_images/counterfit-create-led.ba9db1c9b8c622a635d6dfae5cdc4e70c2b250635bd4f0601c6cf0bd22b7ba46.hi.png) + + LED बनाई जाएगी और एक्टुएटर्स की सूची में दिखाई देगी। + + ![बनी हुई LED](../../../../../translated_images/counterfit-led.c0ab02de6d256ad84d9bad4d67a7faa709f0ea83e410cfe9b5561ef0cef30b1c.hi.png) + + LED बनने के बाद, आप *Color* पिकर का उपयोग करके रंग बदल सकते हैं। रंग चुनने के बाद **Set** बटन चुनें। + +### नाइटलाइट प्रोग्राम करें + +अब CounterFit लाइट सेंसर और LED का उपयोग करके नाइटलाइट प्रोग्राम किया जा सकता है। + +#### कार्य - नाइटलाइट प्रोग्राम करें + +नाइटलाइट प्रोग्राम करें। + +1. VS Code में नाइटलाइट प्रोजेक्ट खोलें जिसे आपने इस असाइनमेंट के पिछले भाग में बनाया था। यदि आवश्यक हो, तो सुनिश्चित करें कि यह वर्चुअल एनवायरनमेंट का उपयोग करके चल रहा है। + +1. `app.py` फाइल खोलें। + +1. `app.py` फाइल में निम्नलिखित कोड जोड़ें ताकि आवश्यक लाइब्रेरी को इंपोर्ट किया जा सके। इसे अन्य `import` लाइनों के नीचे, सबसे ऊपर जोड़ा जाना चाहिए। + + ```python + from counterfit_shims_grove.grove_led import GroveLed + ``` + + `from counterfit_shims_grove.grove_led import GroveLed` स्टेटमेंट CounterFit Grove शिम Python लाइब्रेरी से `GroveLed` को इंपोर्ट करता है। इस लाइब्रेरी में CounterFit ऐप में बनाई गई LED के साथ इंटरैक्ट करने के लिए कोड होता है। + +1. `light_sensor` डिक्लेरेशन के बाद निम्नलिखित कोड जोड़ें ताकि LED को मैनेज करने वाले क्लास का एक इंस्टेंस बनाया जा सके: + + ```python + led = GroveLed(5) + ``` + + लाइन `led = GroveLed(5)` `GroveLed` क्लास का एक इंस्टेंस बनाती है जो Pin **5** से कनेक्ट होता है - CounterFit Grove पिन जिससे LED जुड़ी होती है। + +1. `while` लूप के अंदर और `time.sleep` से पहले एक चेक जोड़ें ताकि लाइट लेवल की जांच की जा सके और LED को ऑन या ऑफ किया जा सके: + + ```python + if light < 300: + led.on() + else: + led.off() + ``` + + यह कोड `light` वैल्यू की जांच करता है। यदि यह 300 से कम है, तो यह `GroveLed` क्लास के `on` मेथड को कॉल करता है, जो LED को ऑन करने के लिए डिजिटल वैल्यू 1 भेजता है। यदि लाइट वैल्यू 300 या उससे अधिक है, तो यह `off` मेथड को कॉल करता है, जो LED को ऑफ करने के लिए डिजिटल वैल्यू 0 भेजता है। + + > 💁 यह कोड `print('Light level:', light)` लाइन के समान स्तर पर इंडेंट किया जाना चाहिए ताकि यह `while` लूप के अंदर हो! + +1. VS Code टर्मिनल से, निम्नलिखित रन करें ताकि आपका Python ऐप चल सके: + + ```sh + python3 app.py + ``` + + लाइट वैल्यू कंसोल पर आउटपुट होगी। + + ```output + (.venv) ➜ GroveTest python3 app.py + Light level: 143 + Light level: 244 + Light level: 246 + Light level: 253 + ``` + +1. *Value* या *Random* सेटिंग्स बदलें ताकि लाइट लेवल 300 से ऊपर और नीचे हो सके। LED ऑन और ऑफ होगी। + +![CounterFit ऐप में LED लाइट लेवल बदलने पर ऑन और ऑफ होती हुई](../../../../../images/virtual-device-running-assignment-1-1.gif) + +> 💁 आप इस कोड को [code-actuator/virtual-device](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-actuator/virtual-device) फोल्डर में पा सकते हैं। + +😀 आपका नाइटलाइट प्रोग्राम सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-sensor.md b/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-sensor.md new file mode 100644 index 00000000..0353556f --- /dev/null +++ b/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/virtual-device-sensor.md @@ -0,0 +1,122 @@ + +# नाइटलाइट बनाएं - वर्चुअल IoT हार्डवेयर + +इस पाठ के इस भाग में, आप अपने वर्चुअल IoT डिवाइस में एक लाइट सेंसर जोड़ेंगे। + +## वर्चुअल हार्डवेयर + +नाइटलाइट को एक सेंसर की आवश्यकता होती है, जिसे CounterFit ऐप में बनाया गया है। + +यह सेंसर एक **लाइट सेंसर** है। एक भौतिक IoT डिवाइस में, यह एक [फोटोडायोड](https://wikipedia.org/wiki/Photodiode) होता है जो प्रकाश को विद्युत संकेत में बदलता है। लाइट सेंसर एनालॉग सेंसर होते हैं जो एक पूर्णांक मान भेजते हैं जो प्रकाश की सापेक्ष मात्रा को दर्शाता है, लेकिन यह किसी मानक माप इकाई जैसे [लक्स](https://wikipedia.org/wiki/Lux) से मेल नहीं खाता। + +### CounterFit में सेंसर जोड़ें + +वर्चुअल लाइट सेंसर का उपयोग करने के लिए, आपको इसे CounterFit ऐप में जोड़ना होगा। + +#### कार्य - CounterFit में सेंसर जोड़ें + +CounterFit ऐप में लाइट सेंसर जोड़ें। + +1. सुनिश्चित करें कि CounterFit वेब ऐप इस असाइनमेंट के पिछले भाग से चल रहा है। यदि नहीं, तो इसे शुरू करें। + +1. एक लाइट सेंसर बनाएं: + + 1. *Sensors* पैन में *Create sensor* बॉक्स में, *Sensor type* ड्रॉपडाउन करें और *Light* चुनें। + + 1. *Units* को *NoUnits* पर सेट रहने दें। + + 1. सुनिश्चित करें कि *Pin* को *0* पर सेट किया गया है। + + 1. **Add** बटन चुनें ताकि Pin 0 पर लाइट सेंसर बनाया जा सके। + + ![लाइट सेंसर सेटिंग्स](../../../../../translated_images/counterfit-create-light-sensor.9f36a5e0d4458d8d554d54b34d2c806d56093d6e49fddcda2d20f6fef7f5cce1.hi.png) + + लाइट सेंसर बनाया जाएगा और सेंसर सूची में दिखाई देगा। + + ![लाइट सेंसर बनाया गया](../../../../../translated_images/counterfit-light-sensor.5d0f5584df56b90f6b2561910d9cb20dfbd73eeff2177c238d38f4de54aefae1.hi.png) + +## लाइट सेंसर को प्रोग्राम करें + +अब डिवाइस को बिल्ट-इन लाइट सेंसर का उपयोग करने के लिए प्रोग्राम किया जा सकता है। + +### कार्य - लाइट सेंसर को प्रोग्राम करें + +डिवाइस को प्रोग्राम करें। + +1. VS Code में नाइटलाइट प्रोजेक्ट खोलें जिसे आपने इस असाइनमेंट के पिछले भाग में बनाया था। यदि आवश्यक हो, तो सुनिश्चित करें कि यह वर्चुअल एनवायरनमेंट का उपयोग करके चल रहा है, टर्मिनल को बंद करें और पुनः बनाएं। + +1. `app.py` फ़ाइल खोलें। + +1. `app.py` फ़ाइल के शीर्ष पर निम्न कोड जोड़ें ताकि आवश्यक लाइब्रेरी को आयात किया जा सके: + + ```python + import time + from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor + ``` + + `import time` स्टेटमेंट Python के `time` मॉड्यूल को आयात करता है, जिसका उपयोग इस असाइनमेंट में बाद में किया जाएगा। + + `from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor` स्टेटमेंट CounterFit Grove शिम Python लाइब्रेरी से `GroveLightSensor` को आयात करता है। इस लाइब्रेरी में CounterFit ऐप में बनाए गए लाइट सेंसर के साथ इंटरैक्ट करने के लिए कोड है। + +1. फ़ाइल के नीचे निम्न कोड जोड़ें ताकि लाइट सेंसर को प्रबंधित करने वाले क्लास के इंस्टेंस बनाए जा सकें: + + ```python + light_sensor = GroveLightSensor(0) + ``` + + लाइन `light_sensor = GroveLightSensor(0)` `GroveLightSensor` क्लास का एक इंस्टेंस बनाता है जो Pin **0** से जुड़ा है - CounterFit Grove पिन जहां लाइट सेंसर जुड़ा हुआ है। + +1. ऊपर दिए गए कोड के बाद एक अनंत लूप जोड़ें ताकि लाइट सेंसर का मान प्राप्त किया जा सके और इसे कंसोल पर प्रिंट किया जा सके: + + ```python + while True: + light = light_sensor.light + print('Light level:', light) + ``` + + यह `GroveLightSensor` क्लास की `light` प्रॉपर्टी का उपयोग करके वर्तमान प्रकाश स्तर को पढ़ेगा। यह प्रॉपर्टी पिन से एनालॉग मान पढ़ती है। यह मान फिर कंसोल पर प्रिंट किया जाता है। + +1. `while` लूप के अंत में एक सेकंड की छोटी नींद जोड़ें क्योंकि प्रकाश स्तर को लगातार जांचने की आवश्यकता नहीं है। नींद डिवाइस की पावर खपत को कम करती है। + + ```python + time.sleep(1) + ``` + +1. VS Code टर्मिनल से, निम्नलिखित चलाएं ताकि आपका Python ऐप चल सके: + + ```sh + python3 app.py + ``` + + प्रकाश मान कंसोल पर आउटपुट होंगे। प्रारंभ में यह मान 0 होगा। + +1. CounterFit ऐप से, लाइट सेंसर का मान बदलें जिसे ऐप द्वारा पढ़ा जाएगा। आप इसे दो तरीकों में से एक में कर सकते हैं: + + * लाइट सेंसर के लिए *Value* बॉक्स में एक संख्या दर्ज करें, फिर **Set** बटन चुनें। आपके द्वारा दर्ज की गई संख्या सेंसर द्वारा लौटाया गया मान होगी। + + * *Random* चेकबॉक्स को चेक करें, और *Min* और *Max* मान दर्ज करें, फिर **Set** बटन चुनें। हर बार जब सेंसर एक मान पढ़ता है, तो यह *Min* और *Max* के बीच एक रैंडम संख्या पढ़ेगा। + + आपके द्वारा सेट किए गए मान कंसोल पर आउटपुट होंगे। मान बदलने के लिए *Value* या *Random* सेटिंग्स बदलें। + + ```output + (.venv) ➜ GroveTest python3 app.py + Light level: 143 + Light level: 244 + Light level: 246 + Light level: 253 + ``` + +> 💁 आप इस कोड को [code-sensor/virtual-device](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-sensor/virtual-device) फ़ोल्डर में पा सकते हैं। + +😀 आपका नाइटलाइट प्रोग्राम सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-actuator.md b/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-actuator.md new file mode 100644 index 00000000..2117d323 --- /dev/null +++ b/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-actuator.md @@ -0,0 +1,122 @@ + +# रात का लैंप बनाएं - Wio Terminal + +इस पाठ के इस भाग में, आप अपने Wio Terminal में एक LED जोड़ेंगे और इसका उपयोग रात का लैंप बनाने के लिए करेंगे। + +## हार्डवेयर + +रात के लैंप को अब एक एक्टुएटर की आवश्यकता है। + +एक्टुएटर एक **LED** है, एक [लाइट-एमिटिंग डायोड](https://wikipedia.org/wiki/Light-emitting_diode) जो तब प्रकाश उत्सर्जित करता है जब उसमें करंट प्रवाहित होता है। यह एक डिजिटल एक्टुएटर है जिसके दो स्टेट्स होते हैं, ऑन और ऑफ। 1 का मान भेजने से LED चालू हो जाती है, और 0 भेजने से बंद हो जाती है। यह एक बाहरी Grove एक्टुएटर है और इसे Wio Terminal से कनेक्ट करने की आवश्यकता है। + +रात के लैंप का लॉजिक निम्नलिखित छद्म-कोड में है: + +```output +Check the light level. +If the light is less than 300 + Turn the LED on +Otherwise + Turn the LED off +``` + +### LED को कनेक्ट करें + +Grove LED एक मॉड्यूल के रूप में आता है जिसमें विभिन्न रंगों के LED होते हैं, जिससे आप अपना पसंदीदा रंग चुन सकते हैं। + +#### कार्य - LED को कनेक्ट करें + +LED को कनेक्ट करें। + +![एक Grove LED](../../../../../translated_images/grove-led.6c853be93f473cf2c439cfc74bb1064732b22251a83cedf66e62f783f9cc1a79.hi.png) + +1. अपना पसंदीदा LED चुनें और उसके पैरों को LED मॉड्यूल के दो छेदों में डालें। + + LED लाइट-एमिटिंग डायोड होते हैं, और डायोड ऐसे इलेक्ट्रॉनिक उपकरण होते हैं जो केवल एक दिशा में करंट प्रवाहित कर सकते हैं। इसका मतलब है कि LED को सही दिशा में कनेक्ट करना आवश्यक है, अन्यथा यह काम नहीं करेगा। + + LED के एक पैर को पॉजिटिव पिन कहा जाता है, और दूसरे को नेगेटिव पिन। LED पूरी तरह से गोल नहीं होती है और एक तरफ थोड़ी सपाट होती है। सपाट तरफ नेगेटिव पिन होता है। जब आप LED को मॉड्यूल से कनेक्ट करते हैं, तो सुनिश्चित करें कि गोल तरफ वाला पिन मॉड्यूल के बाहर **+** चिह्नित सॉकेट से जुड़ा हो, और सपाट तरफ वाला पिन मॉड्यूल के बीच के पास वाले सॉकेट से जुड़ा हो। + +1. LED मॉड्यूल में एक स्पिन बटन होता है जो आपको ब्राइटनेस को नियंत्रित करने की अनुमति देता है। इसे शुरू में पूरी तरह से ऊपर घुमाएं, इसे छोटे फिलिप्स हेड स्क्रूड्राइवर का उपयोग करके एंटी-क्लॉकवाइज घुमाएं। + +1. Grove केबल का एक सिरा LED मॉड्यूल के सॉकेट में डालें। यह केवल एक दिशा में ही जाएगा। + +1. Wio Terminal को अपने कंप्यूटर या अन्य पावर सप्लाई से डिस्कनेक्ट करें, और Grove केबल के दूसरे सिरे को Wio Terminal के स्क्रीन की ओर देखते हुए दाईं ओर वाले Grove सॉकेट में कनेक्ट करें। यह सॉकेट पावर बटन से सबसे दूर है। + + > 💁 दाईं ओर वाला Grove सॉकेट एनालॉग या डिजिटल सेंसर और एक्टुएटर के साथ उपयोग किया जा सकता है। बाईं ओर वाला सॉकेट केवल I2C और डिजिटल सेंसर और एक्टुएटर के लिए है। + +![Grove LED दाईं ओर वाले सॉकेट से जुड़ा हुआ](../../../../../translated_images/wio-led.265a1897e72d7f21c753257516a4b677d8e30ce2b95fee98189458b3275ba0a6.hi.png) + +## रात के लैंप को प्रोग्राम करें + +अब रात के लैंप को बिल्ट-इन लाइट सेंसर और Grove LED का उपयोग करके प्रोग्राम किया जा सकता है। + +### कार्य - रात के लैंप को प्रोग्राम करें + +रात के लैंप को प्रोग्राम करें। + +1. VS Code में रात के लैंप प्रोजेक्ट खोलें जिसे आपने इस असाइनमेंट के पिछले भाग में बनाया था। + +1. `setup` फंक्शन के नीचे निम्नलिखित लाइन जोड़ें: + + ```cpp + pinMode(D0, OUTPUT); + ``` + + यह लाइन Grove पोर्ट के माध्यम से LED के साथ संचार करने के लिए उपयोग किए जाने वाले पिन को कॉन्फ़िगर करती है। + + `D0` पिन दाईं ओर वाले Grove सॉकेट का डिजिटल पिन है। इस पिन को `OUTPUT` पर सेट किया गया है, जिसका मतलब है कि यह एक्टुएटर से जुड़ा है और पिन पर डेटा लिखा जाएगा। + +1. `loop` फंक्शन में `delay` से ठीक पहले निम्नलिखित कोड जोड़ें: + + ```cpp + if (light < 300) + { + digitalWrite(D0, HIGH); + } + else + { + digitalWrite(D0, LOW); + } + ``` + + यह कोड `light` मान की जांच करता है। यदि यह 300 से कम है, तो यह `D0` डिजिटल पिन को `HIGH` मान भेजता है। यह `HIGH` मान 1 होता है, जिससे LED चालू हो जाती है। यदि लाइट 300 या उससे अधिक है, तो पिन को `LOW` मान 0 भेजा जाता है, जिससे LED बंद हो जाती है। + + > 💁 जब एक्टुएटर को डिजिटल मान भेजते हैं, तो LOW मान 0v होता है, और HIGH मान डिवाइस के लिए अधिकतम वोल्टेज होता है। Wio Terminal के लिए HIGH वोल्टेज 3.3V है। + +1. Wio Terminal को अपने कंप्यूटर से फिर से कनेक्ट करें, और पहले की तरह नया कोड अपलोड करें। + +1. Serial Monitor को कनेक्ट करें। लाइट मान टर्मिनल पर आउटपुट होंगे। + + ```output + > Executing task: platformio device monitor < + + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem101 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + Light value: 4 + Light value: 5 + Light value: 4 + Light value: 158 + Light value: 343 + Light value: 348 + Light value: 344 + ``` + +1. लाइट सेंसर को ढकें और हटाएं। ध्यान दें कि यदि लाइट स्तर 300 या उससे कम है तो LED जल जाएगी, और जब लाइट स्तर 300 से अधिक होगा तो LED बंद हो जाएगी। + +![Wio से जुड़ा LED लाइट स्तर बदलने पर चालू और बंद हो रहा है](../../../../../images/wio-running-assignment-1-1.gif) + +> 💁 आप इस कोड को [code-actuator/wio-terminal](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-actuator/wio-terminal) फ़ोल्डर में पा सकते हैं। + +😀 आपका रात का लैंप प्रोग्राम सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-sensor.md b/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-sensor.md new file mode 100644 index 00000000..a8694847 --- /dev/null +++ b/translations/hi/1-getting-started/lessons/3-sensors-and-actuators/wio-terminal-sensor.md @@ -0,0 +1,85 @@ + +# सेंसर जोड़ें - Wio Terminal + +इस पाठ के इस भाग में, आप अपने Wio Terminal पर लाइट सेंसर का उपयोग करेंगे। + +## हार्डवेयर + +इस पाठ के लिए सेंसर एक **लाइट सेंसर** है जो [फोटोडायोड](https://wikipedia.org/wiki/Photodiode) का उपयोग करके प्रकाश को विद्युत संकेत में बदलता है। यह एक एनालॉग सेंसर है जो 0 से 1,023 तक का पूर्णांक मान भेजता है, जो प्रकाश की सापेक्ष मात्रा को दर्शाता है। यह किसी मानक माप इकाई जैसे [लक्स](https://wikipedia.org/wiki/Lux) से मेल नहीं खाता। + +लाइट सेंसर Wio Terminal में अंतर्निहित है और पीछे की पारदर्शी प्लास्टिक खिड़की के माध्यम से दिखाई देता है। + +![Wio Terminal के पीछे का लाइट सेंसर](../../../../../translated_images/wio-light-sensor.b1f529f3c95f51654f2e2c1d2d4b55fe547d189f588c974f5c2462c728133840.hi.png) + +## लाइट सेंसर को प्रोग्राम करें + +अब डिवाइस को अंतर्निहित लाइट सेंसर का उपयोग करने के लिए प्रोग्राम किया जा सकता है। + +### कार्य + +डिवाइस को प्रोग्राम करें। + +1. VS Code में नाइटलाइट प्रोजेक्ट खोलें जिसे आपने इस असाइनमेंट के पिछले भाग में बनाया था। + +1. `setup` फ़ंक्शन के अंत में निम्नलिखित पंक्ति जोड़ें: + + ```cpp + pinMode(WIO_LIGHT, INPUT); + ``` + + यह पंक्ति सेंसर हार्डवेयर के साथ संचार करने के लिए उपयोग किए जाने वाले पिन को कॉन्फ़िगर करती है। + + `WIO_LIGHT` पिन उस GPIO पिन का नंबर है जो ऑन-बोर्ड लाइट सेंसर से जुड़ा है। इस पिन को `INPUT` पर सेट किया गया है, जिसका अर्थ है कि यह सेंसर से जुड़ा है और पिन से डेटा पढ़ा जाएगा। + +1. `loop` फ़ंक्शन की सामग्री को हटा दें। + +1. अब खाली `loop` फ़ंक्शन में निम्नलिखित कोड जोड़ें: + + ```cpp + int light = analogRead(WIO_LIGHT); + Serial.print("Light value: "); + Serial.println(light); + ``` + + यह कोड `WIO_LIGHT` पिन से एक एनालॉग मान पढ़ता है। यह ऑन-बोर्ड लाइट सेंसर से 0-1,023 तक का मान पढ़ता है। यह मान फिर सीरियल पोर्ट पर भेजा जाता है ताकि आप इस कोड के चलने पर इसे सीरियल मॉनिटर में पढ़ सकें। `Serial.print` टेक्स्ट को बिना नई लाइन के अंत में लिखता है, इसलिए प्रत्येक लाइन `Light value:` से शुरू होगी और वास्तविक लाइट मान पर समाप्त होगी। + +1. `loop` के अंत में एक सेकंड (1,000ms) की छोटी देरी जोड़ें क्योंकि लाइट स्तरों को लगातार जांचने की आवश्यकता नहीं है। देरी डिवाइस की पावर खपत को कम करती है। + + ```cpp + delay(1000); + ``` + +1. Wio Terminal को अपने कंप्यूटर से फिर से कनेक्ट करें और पहले की तरह नया कोड अपलोड करें। + +1. सीरियल मॉनिटर से कनेक्ट करें। लाइट मान टर्मिनल पर आउटपुट होंगे। Wio Terminal के पीछे के लाइट सेंसर को ढकें और हटाएं, और मान बदल जाएंगे। + + ```output + > Executing task: platformio device monitor < + + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem101 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + Light value: 4 + Light value: 5 + Light value: 4 + Light value: 158 + Light value: 343 + Light value: 348 + Light value: 344 + ``` + +> 💁 आप इस कोड को [code-sensor/wio-terminal](../../../../../1-getting-started/lessons/3-sensors-and-actuators/code-sensor/wio-terminal) फ़ोल्डर में पा सकते हैं। + +😀 अपने नाइटलाइट प्रोग्राम में सेंसर जोड़ना सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/4-connect-internet/README.md b/translations/hi/1-getting-started/lessons/4-connect-internet/README.md new file mode 100644 index 00000000..a614e14d --- /dev/null +++ b/translations/hi/1-getting-started/lessons/4-connect-internet/README.md @@ -0,0 +1,456 @@ + +# अपने डिवाइस को इंटरनेट से कनेक्ट करें + +![इस पाठ का स्केच नोट अवलोकन](../../../../../translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.hi.jpg) + +> स्केच नोट [नित्या नरसिम्हन](https://github.com/nitya) द्वारा। बड़ी छवि देखने के लिए क्लिक करें। + +यह पाठ [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn) के [Hello IoT series](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) का हिस्सा है। यह पाठ दो वीडियो में पढ़ाया गया था - एक 1 घंटे का पाठ और एक 1 घंटे का ऑफिस आवर, जिसमें पाठ के हिस्सों को गहराई से समझाया गया और सवालों के जवाब दिए गए। + +[![पाठ 4: अपने डिवाइस को इंटरनेट से कनेक्ट करें](https://img.youtube.com/vi/O4dd172mZhs/0.jpg)](https://youtu.be/O4dd172mZhs) + +[![पाठ 4: अपने डिवाइस को इंटरनेट से कनेक्ट करें - ऑफिस आवर](https://img.youtube.com/vi/j-cVCzRDE2Q/0.jpg)](https://youtu.be/j-cVCzRDE2Q) + +> 🎥 ऊपर दी गई छवियों पर क्लिक करें और वीडियो देखें + +## प्री-लेक्चर क्विज़ + +[प्री-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/7) + +## परिचय + +IoT में **I** का मतलब **इंटरनेट** है - क्लाउड कनेक्टिविटी और सेवाएं जो IoT डिवाइस की कई विशेषताओं को सक्षम बनाती हैं, जैसे कि डिवाइस से जुड़े सेंसर से माप एकत्र करना और एक्टुएटर्स को नियंत्रित करने के लिए संदेश भेजना। IoT डिवाइस आमतौर पर एक मानक संचार प्रोटोकॉल का उपयोग करके एकल क्लाउड IoT सेवा से जुड़ते हैं, और वह सेवा आपके IoT एप्लिकेशन के बाकी हिस्सों से जुड़ी होती है, जैसे कि AI सेवाएं जो आपके डेटा के आसपास स्मार्ट निर्णय लेती हैं, या नियंत्रण और रिपोर्टिंग के लिए वेब ऐप्स। + +> 🎓 सेंसर से एकत्र किया गया डेटा और क्लाउड को भेजा गया डेटा टेलीमेट्री कहलाता है। + +IoT डिवाइस क्लाउड से संदेश प्राप्त कर सकते हैं। अक्सर ये संदेश कमांड होते हैं - यानी किसी कार्य को करने के निर्देश, चाहे वह आंतरिक रूप से हो (जैसे कि रीबूट या फर्मवेयर अपडेट), या एक्टुएटर का उपयोग करके (जैसे कि लाइट चालू करना)। + +यह पाठ IoT डिवाइस को क्लाउड से कनेक्ट करने के लिए उपयोग किए जाने वाले कुछ संचार प्रोटोकॉल और वे किस प्रकार का डेटा भेज या प्राप्त कर सकते हैं, इसका परिचय देता है। आप इन दोनों के साथ व्यावहारिक अनुभव भी प्राप्त करेंगे, अपने नाइटलाइट में इंटरनेट नियंत्रण जोड़ेंगे और LED नियंत्रण लॉजिक को 'सर्वर' कोड में स्थानांतरित करेंगे जो स्थानीय रूप से चल रहा है। + +इस पाठ में हम निम्नलिखित को कवर करेंगे: + +* [संचार प्रोटोकॉल](../../../../../1-getting-started/lessons/4-connect-internet) +* [मैसेज क्यूइंग टेलीमेट्री ट्रांसपोर्ट (MQTT)](../../../../../1-getting-started/lessons/4-connect-internet) +* [टेलीमेट्री](../../../../../1-getting-started/lessons/4-connect-internet) +* [कमांड्स](../../../../../1-getting-started/lessons/4-connect-internet) + +## संचार प्रोटोकॉल + +IoT डिवाइस द्वारा इंटरनेट से संवाद करने के लिए कई लोकप्रिय संचार प्रोटोकॉल हैं। सबसे लोकप्रिय प्रोटोकॉल किसी प्रकार के ब्रॉकर के माध्यम से प्रकाशित/सदस्यता संदेश पर आधारित हैं। IoT डिवाइस ब्रॉकर से जुड़ते हैं और टेलीमेट्री प्रकाशित करते हैं और कमांड्स की सदस्यता लेते हैं। क्लाउड सेवाएं भी ब्रॉकर से जुड़ती हैं और सभी टेलीमेट्री संदेशों की सदस्यता लेती हैं और विशिष्ट डिवाइसों या डिवाइस समूहों को कमांड्स प्रकाशित करती हैं। + +![IoT डिवाइस ब्रॉकर से जुड़ते हैं, टेलीमेट्री प्रकाशित करते हैं और कमांड्स की सदस्यता लेते हैं। क्लाउड सेवाएं ब्रॉकर से जुड़ती हैं, सभी टेलीमेट्री की सदस्यता लेती हैं और विशिष्ट डिवाइसों को कमांड्स भेजती हैं।](../../../../../translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.hi.png) + +MQTT IoT डिवाइस के लिए सबसे लोकप्रिय संचार प्रोटोकॉल है और इसे इस पाठ में कवर किया गया है। अन्य प्रोटोकॉल में AMQP और HTTP/HTTPS शामिल हैं। + +## मैसेज क्यूइंग टेलीमेट्री ट्रांसपोर्ट (MQTT) + +[MQTT](http://mqtt.org) एक हल्का, ओपन स्टैंडर्ड मैसेजिंग प्रोटोकॉल है जो डिवाइसों के बीच संदेश भेज सकता है। इसे 1999 में तेल पाइपलाइनों की निगरानी के लिए डिज़ाइन किया गया था, और 15 साल बाद IBM द्वारा एक ओपन स्टैंडर्ड के रूप में जारी किया गया। + +MQTT में एक ब्रॉकर और कई क्लाइंट होते हैं। सभी क्लाइंट ब्रॉकर से जुड़ते हैं, और ब्रॉकर संदेशों को संबंधित क्लाइंट्स तक पहुंचाता है। संदेशों को नामित टॉपिक्स का उपयोग करके रूट किया जाता है, बजाय इसके कि उन्हें सीधे किसी व्यक्तिगत क्लाइंट को भेजा जाए। एक क्लाइंट किसी टॉपिक पर प्रकाशित कर सकता है, और उस टॉपिक की सदस्यता लेने वाले सभी क्लाइंट्स को संदेश प्राप्त होगा। + +![IoT डिवाइस /telemetry टॉपिक पर टेलीमेट्री प्रकाशित कर रहा है, और क्लाउड सेवा उस टॉपिक की सदस्यता ले रही है](../../../../../translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.hi.png) + +✅ शोध करें। यदि आपके पास बहुत सारे IoT डिवाइस हैं, तो आप कैसे सुनिश्चित कर सकते हैं कि आपका MQTT ब्रॉकर सभी संदेशों को संभाल सके? + +### अपने IoT डिवाइस को MQTT से कनेक्ट करें + +अपने नाइटलाइट में इंटरनेट नियंत्रण जोड़ने का पहला भाग इसे MQTT ब्रॉकर से कनेक्ट करना है। + +#### कार्य + +अपने डिवाइस को MQTT ब्रॉकर से कनेक्ट करें। + +इस पाठ के इस भाग में, आप अपने IoT नाइटलाइट को इंटरनेट से कनेक्ट करेंगे ताकि इसे दूरस्थ रूप से नियंत्रित किया जा सके। इस पाठ में बाद में, आपका IoT डिवाइस MQTT के माध्यम से एक सार्वजनिक MQTT ब्रॉकर को प्रकाश स्तर का टेलीमेट्री संदेश भेजेगा, जहां इसे कुछ सर्वर कोड द्वारा उठाया जाएगा जिसे आप लिखेंगे। यह कोड प्रकाश स्तर की जांच करेगा और डिवाइस को LED चालू या बंद करने का निर्देश देने वाला एक कमांड संदेश वापस भेजेगा। + +ऐसी सेटअप के लिए वास्तविक दुनिया का उपयोग मामला यह हो सकता है कि कई प्रकाश सेंसरों से डेटा एकत्र किया जाए और फिर निर्णय लिया जाए कि लाइट्स चालू करनी हैं या नहीं, जैसे कि एक स्टेडियम में जहां बहुत सारी लाइट्स हैं। यह लाइट्स को चालू होने से रोक सकता है यदि केवल एक सेंसर बादलों या पक्षी द्वारा ढका हुआ हो, लेकिन अन्य सेंसर पर्याप्त प्रकाश का पता लगाते हों। + +✅ और कौन से ऐसे परिदृश्य हो सकते हैं जहां कई सेंसरों से डेटा का मूल्यांकन करने के बाद ही कमांड भेजने की आवश्यकता हो? + +इस असाइनमेंट के हिस्से के रूप में MQTT ब्रॉकर सेटअप की जटिलताओं से निपटने के बजाय, आप [Eclipse Mosquitto](https://www.mosquitto.org) द्वारा संचालित एक सार्वजनिक परीक्षण सर्वर का उपयोग कर सकते हैं, जो एक ओपन-सोर्स MQTT ब्रॉकर है। यह परीक्षण ब्रॉकर [test.mosquitto.org](https://test.mosquitto.org) पर सार्वजनिक रूप से उपलब्ध है और इसे सेटअप करने के लिए किसी खाते की आवश्यकता नहीं है, जिससे यह MQTT क्लाइंट्स और सर्वर का परीक्षण करने के लिए एक शानदार उपकरण बन जाता है। + +> 💁 यह परीक्षण ब्रॉकर सार्वजनिक और असुरक्षित है। कोई भी आपके द्वारा प्रकाशित सामग्री को सुन सकता है, इसलिए इसे किसी भी निजी डेटा के साथ उपयोग नहीं किया जाना चाहिए। + +![असाइनमेंट का फ्लो चार्ट जिसमें प्रकाश स्तर पढ़ा और जांचा जा रहा है, और LED नियंत्रित किया जा रहा है](../../../../../translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.hi.png) + +MQTT ब्रॉकर से अपने डिवाइस को कनेक्ट करने के लिए नीचे दिए गए संबंधित चरण का पालन करें: + +* [Arduino - Wio Terminal](wio-terminal-mqtt.md) +* [सिंगल-बोर्ड कंप्यूटर - Raspberry Pi/Virtual IoT डिवाइस](single-board-computer-mqtt.md) + +### MQTT में गहराई से जानकारी + +टॉपिक्स में एक पदानुक्रम हो सकता है, और क्लाइंट्स वाइल्डकार्ड का उपयोग करके पदानुक्रम के विभिन्न स्तरों की सदस्यता ले सकते हैं। उदाहरण के लिए, आप `/telemetry/temperature` टॉपिक पर तापमान टेलीमेट्री संदेश भेज सकते हैं और `/telemetry/humidity` टॉपिक पर आर्द्रता संदेश भेज सकते हैं, फिर अपने क्लाउड ऐप में `/telemetry/*` टॉपिक की सदस्यता लेकर दोनों टेलीमेट्री संदेश प्राप्त कर सकते हैं। + +संदेशों को गुणवत्ता सेवा (QoS) के साथ भेजा जा सकता है, जो संदेश प्राप्त होने की गारंटी को निर्धारित करता है। + +* अधिकतम एक बार - संदेश केवल एक बार भेजा जाता है और क्लाइंट और ब्रॉकर डिलीवरी की पुष्टि करने के लिए कोई अतिरिक्त कदम नहीं उठाते (फायर एंड फॉरगेट)। +* कम से कम एक बार - संदेश को कई बार पुनः प्रयास किया जाता है जब तक कि पुष्टि प्राप्त न हो जाए (पुष्टि की गई डिलीवरी)। +* बिल्कुल एक बार - भेजने वाला और प्राप्त करने वाला एक दो-स्तरीय हैंडशेक में संलग्न होते हैं ताकि यह सुनिश्चित किया जा सके कि संदेश की केवल एक प्रति प्राप्त हो (आश्वस्त डिलीवरी)। + +✅ कौन से परिदृश्य में आश्वस्त डिलीवरी संदेश की आवश्यकता हो सकती है, जबकि फायर एंड फॉरगेट संदेश पर्याप्त हो सकता है? + +हालांकि नाम मैसेज क्यूइंग (MQTT में शुरुआती अक्षर), यह वास्तव में संदेश कतारों का समर्थन नहीं करता है। इसका मतलब है कि यदि कोई क्लाइंट डिस्कनेक्ट हो जाता है, तो पुनः कनेक्ट होने पर उसे डिस्कनेक्शन के दौरान भेजे गए संदेश प्राप्त नहीं होंगे, सिवाय उन संदेशों के जिन्हें उसने पहले ही QoS प्रक्रिया का उपयोग करके संसाधित करना शुरू कर दिया था। संदेशों में एक रिटेन फ्लैग सेट किया जा सकता है। यदि यह सेट है, तो MQTT ब्रॉकर उस टॉपिक पर भेजे गए अंतिम संदेश को इस फ्लैग के साथ संग्रहीत करेगा और इसे किसी भी क्लाइंट्स को भेजेगा जो बाद में उस टॉपिक की सदस्यता लेते हैं। इस तरह, क्लाइंट्स हमेशा नवीनतम संदेश प्राप्त करेंगे। + +MQTT एक कीप अलाइव फ़ंक्शन का भी समर्थन करता है जो संदेशों के बीच लंबे अंतराल के दौरान कनेक्शन की जांच करता है। + +> 🦟 [Eclipse Foundation से Mosquitto](https://mosquitto.org) एक मुफ्त MQTT ब्रॉकर प्रदान करता है जिसे आप स्वयं चला सकते हैं और MQTT के साथ प्रयोग कर सकते हैं, साथ ही एक सार्वजनिक MQTT ब्रॉकर भी प्रदान करता है जिसे आप अपने कोड का परीक्षण करने के लिए उपयोग कर सकते हैं, जो [test.mosquitto.org](https://test.mosquitto.org) पर होस्ट किया गया है। + +MQTT कनेक्शन सार्वजनिक और खुले हो सकते हैं, या उपयोगकर्ता नाम और पासवर्ड, या प्रमाणपत्रों का उपयोग करके एन्क्रिप्ट और सुरक्षित किए जा सकते हैं। + +> 💁 MQTT TCP/IP पर संवाद करता है, वही अंतर्निहित नेटवर्क प्रोटोकॉल जो HTTP का उपयोग करता है, लेकिन एक अलग पोर्ट पर। आप MQTT को वेब ऐप्स के साथ संवाद करने के लिए वेब सॉकेट्स के माध्यम से भी उपयोग कर सकते हैं, जो ब्राउज़र में चल रहे हैं, या उन स्थितियों में जहां फायरवॉल या अन्य नेटवर्किंग नियम मानक MQTT कनेक्शन को ब्लॉक करते हैं। + +## टेलीमेट्री + +टेलीमेट्री शब्द ग्रीक मूल से लिया गया है जिसका अर्थ है दूर से मापना। टेलीमेट्री सेंसरों से डेटा एकत्र करने और इसे क्लाउड में भेजने की क्रिया है। + +> 💁 सबसे शुरुआती टेलीमेट्री उपकरणों में से एक 1874 में फ्रांस में आविष्कार किया गया था और यह मोंट ब्लांक से पेरिस तक वास्तविक समय में मौसम और बर्फ की गहराई भेजता था। उस समय वायरलेस तकनीक उपलब्ध नहीं थी, इसलिए इसमें भौतिक तारों का उपयोग किया गया। + +पाठ 1 के स्मार्ट थर्मोस्टेट के उदाहरण पर वापस चलते हैं। + +![कई कमरे सेंसरों का उपयोग करने वाला इंटरनेट से जुड़ा थर्मोस्टेट](../../../../../translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.hi.png) + +थर्मोस्टेट में टेलीमेट्री एकत्र करने के लिए तापमान सेंसर होते हैं। इसमें सबसे अधिक संभावना है कि एक तापमान सेंसर अंतर्निहित होगा, और यह [ब्लूटूथ लो एनर्जी](https://wikipedia.org/wiki/Bluetooth_Low_Energy) (BLE) जैसे वायरलेस प्रोटोकॉल के माध्यम से कई बाहरी तापमान सेंसरों से जुड़ सकता है। + +यह टेलीमेट्री डेटा का एक उदाहरण हो सकता है जिसे यह भेजेगा: + +| नाम | मान | विवरण | +| ---- | ----- | ----------- | +| `thermostat_temperature` | 18°C | थर्मोस्टेट के अंतर्निर्मित तापमान सेंसर द्वारा मापा गया तापमान | +| `livingroom_temperature` | 19°C | एक दूरस्थ तापमान सेंसर द्वारा मापा गया तापमान जिसे `livingroom` नाम दिया गया है ताकि उस कमरे की पहचान की जा सके जिसमें यह है | +| `bedroom_temperature` | 21°C | एक दूरस्थ तापमान सेंसर द्वारा मापा गया तापमान जिसे `bedroom` नाम दिया गया है ताकि उस कमरे की पहचान की जा सके जिसमें यह है | + +क्लाउड सेवा इस टेलीमेट्री डेटा का उपयोग हीटिंग को नियंत्रित करने के लिए कौन से कमांड्स भेजने हैं, इस पर निर्णय लेने के लिए कर सकती है। + +### अपने IoT डिवाइस से टेलीमेट्री भेजें + +अपने नाइटलाइट में इंटरनेट नियंत्रण जोड़ने का अगला भाग टेलीमेट्री टॉपिक पर MQTT ब्रॉकर को प्रकाश स्तर टेलीमेट्री भेजना है। + +#### कार्य - अपने IoT डिवाइस से टेलीमेट्री भेजें + +प्रकाश स्तर टेलीमेट्री को MQTT ब्रॉकर पर भेजें। + +डेटा JSON के रूप में एन्कोड किया जाता है - JavaScript Object Notation का संक्षिप्त नाम, जो टेक्स्ट में डेटा को कुंजी/मान जोड़े का उपयोग करके एन्कोड करने का एक मानक है। + +✅ यदि आपने पहले JSON के बारे में नहीं सुना है, तो आप [JSON.org दस्तावेज़](https://www.json.org/) पर इसके बारे में अधिक जान सकते हैं। + +अपने डिवाइस से MQTT ब्रॉकर को टेलीमेट्री भेजने के लिए नीचे दिए गए संबंधित चरण का पालन करें: + +* [Arduino - Wio Terminal](wio-terminal-telemetry.md) +* [सिंगल-बोर्ड कंप्यूटर - Raspberry Pi/Virtual IoT डिवाइस](single-board-computer-telemetry.md) + +### MQTT ब्रॉकर से टेलीमेट्री प्राप्त करें + +टेलीमेट्री भेजने का कोई मतलब नहीं है यदि इसे सुनने के लिए कुछ भी नहीं है। प्रकाश स्तर टेलीमेट्री को इसे संसाधित करने के लिए कुछ सुनने की आवश्यकता है। यह 'सर्वर' कोड वह प्रकार का कोड है जिसे आप एक बड़े IoT एप्लिकेशन के हिस्से के रूप में क्लाउड सेवा पर तैनात करेंगे, लेकिन यहां आप इस कोड को अपने कंप्यूटर पर (या अपने Pi पर यदि आप सीधे वहां कोडिंग कर रहे हैं) चलाने जा रहे हैं। सर्वर कोड में एक Python ऐप शामिल है जो MQTT के माध्यम से प्रकाश स्तर के साथ टेलीमेट्री संदेशों को सुनता है। इस पाठ में बाद में आप इसे LED चालू या बंद करने के निर्देशों के साथ एक कमांड संदेश के साथ उत्तर देने के लिए बनाएंगे। + +✅ शोध करें: यदि कोई श्रोता नहीं है तो MQTT संदेशों का क्या होता है? + +#### Python और VS Code इंस्टॉल करें + +यदि आपके पास स्थानीय रूप से Python और VS Code इंस्टॉल नहीं है, तो आपको सर्वर को कोड करने के लिए दोनों को इंस्टॉल करना होगा। यदि आप एक वर्चुअल IoT डिवाइस का उपयोग कर रहे हैं, या अपने Raspberry Pi पर काम कर रहे हैं तो आप इस चरण को छोड़ सकते हैं क्योंकि आपके पास इसे पहले से इंस्टॉल और कॉन्फ़िगर किया हुआ होना चाहिए। + +##### कार्य - Python और VS Code इंस्टॉल करें + +Python और VS Code इंस्टॉल करें। + +1. Python इंस्टॉल करें। Python का नवीनतम संस्करण इंस्टॉल करने के निर्देशों के लिए [Python डाउनलोड पेज](https://www.python.org/downloads/) देखें। + +1. Visual Studio Code (VS Code) इंस्टॉल करें। यह वह एडिटर है जिसे आप Python में अपने वर्चुअल डिवाइस कोड लिखने के लिए उपयोग करेंगे। VS Code इंस्टॉल करने के निर्देशों के लिए [VS Code दस्तावेज़](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) देखें। +💁 आप इन पाठों के लिए किसी भी पसंदीदा Python IDE या संपादक का उपयोग करने के लिए स्वतंत्र हैं, लेकिन पाठों में निर्देश VS Code का उपयोग करने के आधार पर दिए जाएंगे। +1. VS Code Pylance एक्सटेंशन इंस्टॉल करें। यह VS Code के लिए एक एक्सटेंशन है जो Python भाषा का समर्थन प्रदान करता है। इस एक्सटेंशन को VS Code में इंस्टॉल करने के निर्देशों के लिए [Pylance एक्सटेंशन डाक्यूमेंटेशन](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) देखें। + +#### Python वर्चुअल एनवायरनमेंट कॉन्फ़िगर करें + +Python की एक शक्तिशाली विशेषता [pip पैकेज](https://pypi.org) इंस्टॉल करने की क्षमता है - ये कोड के पैकेज हैं जो अन्य लोगों द्वारा लिखे गए हैं और इंटरनेट पर प्रकाशित किए गए हैं। आप एक कमांड के साथ अपने कंप्यूटर पर एक pip पैकेज इंस्टॉल कर सकते हैं और फिर उस पैकेज का उपयोग अपने कोड में कर सकते हैं। आप MQTT पर संचार करने के लिए एक पैकेज इंस्टॉल करने के लिए pip का उपयोग करेंगे। + +डिफ़ॉल्ट रूप से, जब आप एक पैकेज इंस्टॉल करते हैं, तो यह आपके कंप्यूटर पर हर जगह उपलब्ध होता है, और यह पैकेज संस्करणों के साथ समस्याओं का कारण बन सकता है - जैसे कि एक एप्लिकेशन एक पैकेज के एक संस्करण पर निर्भर करता है जो तब टूट जाता है जब आप किसी अन्य एप्लिकेशन के लिए एक नया संस्करण इंस्टॉल करते हैं। इस समस्या से बचने के लिए, आप [Python वर्चुअल एनवायरनमेंट](https://docs.python.org/3/library/venv.html) का उपयोग कर सकते हैं, जो मूल रूप से एक समर्पित फ़ोल्डर में Python की एक प्रति है, और जब आप pip पैकेज इंस्टॉल करते हैं, तो वे केवल उस फ़ोल्डर में इंस्टॉल होते हैं। + +##### कार्य - Python वर्चुअल एनवायरनमेंट कॉन्फ़िगर करें + +Python वर्चुअल एनवायरनमेंट कॉन्फ़िगर करें और MQTT pip पैकेज इंस्टॉल करें। + +1. अपने टर्मिनल या कमांड लाइन से, अपनी पसंद के स्थान पर निम्नलिखित कमांड चलाएं ताकि एक नया डायरेक्टरी बनाई जा सके और उसमें नेविगेट किया जा सके: + + ```sh + mkdir nightlight-server + cd nightlight-server + ``` + +1. अब `.venv` फ़ोल्डर में एक वर्चुअल एनवायरनमेंट बनाने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + python3 -m venv .venv + ``` + + > 💁 आपको वर्चुअल एनवायरनमेंट बनाने के लिए स्पष्ट रूप से `python3` कॉल करना होगा, यह सुनिश्चित करने के लिए कि आपके पास Python 2 के साथ-साथ Python 3 (नवीनतम संस्करण) इंस्टॉल है। यदि आपके पास Python 2 इंस्टॉल है, तो `python` कॉल करने पर Python 2 का उपयोग होगा, न कि Python 3 का। + +1. वर्चुअल एनवायरनमेंट को सक्रिय करें: + + * Windows पर: + * यदि आप Command Prompt या Windows Terminal के माध्यम से Command Prompt का उपयोग कर रहे हैं, तो निम्नलिखित चलाएं: + + ```cmd + .venv\Scripts\activate.bat + ``` + + * यदि आप PowerShell का उपयोग कर रहे हैं, तो निम्नलिखित चलाएं: + + ```powershell + .\.venv\Scripts\Activate.ps1 + ``` + + * macOS या Linux पर, निम्नलिखित चलाएं: + + ```cmd + source ./.venv/bin/activate + ``` + + > 💁 ये कमांड उसी स्थान से चलाए जाने चाहिए जहां आपने वर्चुअल एनवायरनमेंट बनाने का कमांड चलाया था। आपको कभी भी `.venv` फ़ोल्डर में नेविगेट करने की आवश्यकता नहीं होगी, आपको हमेशा सक्रिय करने का कमांड और पैकेज इंस्टॉल करने या कोड चलाने के लिए कमांड उसी फ़ोल्डर से चलाना चाहिए जहां आपने वर्चुअल एनवायरनमेंट बनाया था। + +1. एक बार वर्चुअल एनवायरनमेंट सक्रिय हो जाने के बाद, डिफ़ॉल्ट `python` कमांड उस Python संस्करण को चलाएगा जिसका उपयोग वर्चुअल एनवायरनमेंट बनाने के लिए किया गया था। संस्करण प्राप्त करने के लिए निम्नलिखित चलाएं: + + ```sh + python --version + ``` + + आउटपुट निम्नलिखित के समान होगा: + + ```output + (.venv) ➜ nightlight-server python --version + Python 3.9.1 + ``` + + > 💁 आपका Python संस्करण अलग हो सकता है - जब तक यह संस्करण 3.6 या उससे अधिक है, तब तक आप ठीक हैं। यदि नहीं, तो इस फ़ोल्डर को हटा दें, Python का नया संस्करण इंस्टॉल करें और पुनः प्रयास करें। + +1. [Paho-MQTT](https://pypi.org/project/paho-mqtt/) के लिए pip पैकेज इंस्टॉल करने के लिए निम्नलिखित कमांड चलाएं, जो एक लोकप्रिय MQTT लाइब्रेरी है। + + ```sh + pip install paho-mqtt + ``` + + यह pip पैकेज केवल वर्चुअल एनवायरनमेंट में इंस्टॉल होगा और इसके बाहर उपलब्ध नहीं होगा। + +#### सर्वर कोड लिखें + +अब सर्वर कोड Python में लिखा जा सकता है। + +##### कार्य - सर्वर कोड लिखें + +सर्वर कोड लिखें। + +1. वर्चुअल एनवायरनमेंट के अंदर, अपने टर्मिनल या कमांड लाइन से निम्नलिखित चलाएं ताकि `app.py` नामक एक Python फ़ाइल बनाई जा सके: + + * Windows से चलाएं: + + ```cmd + type nul > app.py + ``` + + * macOS या Linux पर चलाएं: + + ```cmd + touch app.py + ``` + +1. वर्तमान फ़ोल्डर को VS Code में खोलें: + + ```sh + code . + ``` + +1. जब VS Code लॉन्च होगा, तो यह Python वर्चुअल एनवायरनमेंट को सक्रिय करेगा। यह नीचे की स्टेटस बार में रिपोर्ट किया जाएगा: + + ![VS Code में चयनित वर्चुअल एनवायरनमेंट दिखा रहा है](../../../../../translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.hi.png) + +1. यदि VS Code टर्मिनल पहले से चल रहा है जब VS Code शुरू होता है, तो इसमें वर्चुअल एनवायरनमेंट सक्रिय नहीं होगा। सबसे आसान तरीका है टर्मिनल को **Kill the active terminal instance** बटन का उपयोग करके बंद करना: + + ![VS Code Kill the active terminal instance बटन](../../../../../translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.hi.png) + +1. *Terminal -> New Terminal* का चयन करके या `` CTRL+` `` दबाकर एक नया VS Code टर्मिनल लॉन्च करें। नया टर्मिनल वर्चुअल एनवायरनमेंट को लोड करेगा, और इसे सक्रिय करने का कॉल टर्मिनल में दिखाई देगा। वर्चुअल एनवायरनमेंट का नाम (`.venv`) भी प्रॉम्प्ट में होगा: + + ```output + ➜ nightlight-server source .venv/bin/activate + (.venv) ➜ nightlight + ``` + +1. VS Code एक्सप्लोरर से `app.py` फ़ाइल खोलें और निम्नलिखित कोड जोड़ें: + + ```python + import json + import time + + import paho.mqtt.client as mqtt + + id = '' + + client_telemetry_topic = id + '/telemetry' + client_name = id + 'nightlight_server' + + mqtt_client = mqtt.Client(client_name) + mqtt_client.connect('test.mosquitto.org') + + mqtt_client.loop_start() + + def handle_telemetry(client, userdata, message): + payload = json.loads(message.payload.decode()) + print("Message received:", payload) + + mqtt_client.subscribe(client_telemetry_topic) + mqtt_client.on_message = handle_telemetry + + while True: + time.sleep(2) + ``` + + लाइन 6 में `` को उस यूनिक ID से बदलें जिसे आपने अपना डिवाइस कोड बनाते समय उपयोग किया था। + + ⚠️ यह **उसी** ID के समान होना चाहिए जिसे आपने अपने डिवाइस पर उपयोग किया था, अन्यथा सर्वर कोड सही टॉपिक पर सब्सक्राइब या पब्लिश नहीं करेगा। + + यह कोड एक यूनिक नाम के साथ एक MQTT क्लाइंट बनाता है और *test.mosquitto.org* ब्रोकर्स से कनेक्ट करता है। फिर यह एक प्रोसेसिंग लूप शुरू करता है जो बैकग्राउंड थ्रेड में किसी भी सब्सक्राइब किए गए टॉपिक पर संदेश सुनने के लिए चलता है। + + क्लाइंट फिर टेलीमेट्री टॉपिक पर संदेशों को सब्सक्राइब करता है और एक फ़ंक्शन परिभाषित करता है जिसे संदेश प्राप्त होने पर कॉल किया जाता है। जब एक टेलीमेट्री संदेश प्राप्त होता है, तो `handle_telemetry` फ़ंक्शन को कॉल किया जाता है, जो कंसोल में प्राप्त संदेश को प्रिंट करता है। + + अंत में, एक अनंत लूप एप्लिकेशन को चलाता रहता है। MQTT क्लाइंट बैकग्राउंड थ्रेड में संदेशों को सुन रहा है और मुख्य एप्लिकेशन के चलने तक चलता रहता है। + +1. VS Code टर्मिनल से, अपने Python ऐप को चलाने के लिए निम्नलिखित चलाएं: + + ```sh + python app.py + ``` + + ऐप IoT डिवाइस से संदेश सुनना शुरू कर देगा। + +1. सुनिश्चित करें कि आपका डिवाइस चल रहा है और टेलीमेट्री संदेश भेज रहा है। अपने भौतिक या वर्चुअल डिवाइस द्वारा डिटेक्ट किए गए प्रकाश स्तरों को समायोजित करें। प्राप्त संदेश टर्मिनल में प्रिंट किए जाएंगे। + + ```output + (.venv) ➜ nightlight-server python app.py + Message received: {'light': 0} + Message received: {'light': 400} + ``` + + nightlight वर्चुअल एनवायरनमेंट में `app.py` फ़ाइल को चलाना आवश्यक है ताकि nightlight-server वर्चुअल एनवायरनमेंट में `app.py` फ़ाइल द्वारा भेजे गए संदेश प्राप्त किए जा सकें। + +> 💁 आप इस कोड को [code-server/server](../../../../../1-getting-started/lessons/4-connect-internet/code-server/server) फ़ोल्डर में पा सकते हैं। + +### टेलीमेट्री कितनी बार भेजी जानी चाहिए? + +टेलीमेट्री के साथ एक महत्वपूर्ण विचार यह है कि डेटा को कितनी बार मापा और भेजा जाना चाहिए? जवाब है - यह निर्भर करता है। यदि आप बार-बार मापते हैं, तो आप माप में बदलावों पर तेजी से प्रतिक्रिया कर सकते हैं, लेकिन आप अधिक पावर, अधिक बैंडविड्थ का उपयोग करते हैं, अधिक डेटा उत्पन्न करते हैं और इसे प्रोसेस करने के लिए अधिक क्लाउड संसाधनों की आवश्यकता होती है। आपको पर्याप्त बार मापना चाहिए, लेकिन बहुत बार नहीं। + +थर्मोस्टेट के लिए, हर कुछ मिनटों में मापना शायद पर्याप्त से अधिक है क्योंकि तापमान इतनी बार नहीं बदलता। यदि आप केवल दिन में एक बार मापते हैं, तो आप एक धूप वाले दिन के बीच में रात के तापमान के लिए अपने घर को गर्म कर सकते हैं, जबकि यदि आप हर सेकंड मापते हैं, तो आपके पास हजारों अनावश्यक रूप से डुप्लिकेट तापमान माप होंगे जो उपयोगकर्ता के इंटरनेट की गति और बैंडविड्थ को खा जाएंगे (सीमित बैंडविड्थ योजनाओं वाले लोगों के लिए एक समस्या), अधिक पावर का उपयोग करेंगे जो बैटरी चालित डिवाइस जैसे रिमोट सेंसर के लिए समस्या हो सकती है, और प्रोसेसिंग और स्टोरेज के लिए प्रदाता के क्लाउड कंप्यूटिंग संसाधनों की लागत बढ़ाएंगे। + +यदि आप किसी फैक्ट्री में एक मशीनरी के आसपास डेटा की निगरानी कर रहे हैं, जो यदि विफल हो जाती है तो विनाशकारी क्षति और लाखों डॉलर के राजस्व का नुकसान हो सकता है, तो प्रति सेकंड कई बार मापना आवश्यक हो सकता है। बैंडविड्थ बर्बाद करना बेहतर है बजाय इसके कि टेलीमेट्री को मिस कर दिया जाए जो यह संकेत दे सकती है कि मशीन को तोड़ने से पहले रोका और ठीक किया जाना चाहिए। + +> 💁 इस स्थिति में, आप इंटरनेट पर निर्भरता को कम करने के लिए पहले टेलीमेट्री को प्रोसेस करने के लिए एक एज डिवाइस रखने पर विचार कर सकते हैं। + +### कनेक्टिविटी का नुकसान + +इंटरनेट कनेक्शन अविश्वसनीय हो सकते हैं, और आउटेज आम हैं। ऐसे में IoT डिवाइस को क्या करना चाहिए - क्या उसे डेटा खो देना चाहिए, या कनेक्टिविटी बहाल होने तक इसे स्टोर करना चाहिए? फिर से, जवाब है - यह निर्भर करता है। + +थर्मोस्टेट के लिए डेटा को खो देना ठीक हो सकता है जैसे ही एक नया तापमान माप लिया गया हो। हीटिंग सिस्टम को इस बात की परवाह नहीं है कि 20 मिनट पहले तापमान 20.5°C था, अगर अब तापमान 19°C है, तो यह वर्तमान तापमान है जो यह निर्धारित करता है कि हीटिंग चालू होनी चाहिए या नहीं। + +मशीनरी के लिए आप डेटा को रखना चाह सकते हैं, खासकर यदि इसका उपयोग ट्रेंड्स देखने के लिए किया जाता है। मशीन लर्निंग मॉडल हैं जो डेटा की स्ट्रीम में अनियमितताओं का पता लगाने के लिए एक परिभाषित समय अवधि (जैसे पिछले घंटे) के डेटा को देखकर अनियमित डेटा की पहचान करते हैं। यह अक्सर प्रेडिक्टिव मेंटेनेंस के लिए उपयोग किया जाता है, यह देखने के लिए कि कुछ टूटने वाला है ताकि आप इसे टूटने से पहले ठीक कर सकें। आप मशीन के लिए हर टेलीमेट्री को प्रोसेसिंग के लिए भेजना चाह सकते हैं, इसलिए जैसे ही IoT डिवाइस फिर से कनेक्ट हो, यह इंटरनेट आउटेज के दौरान उत्पन्न सभी टेलीमेट्री को भेज देगा। + +IoT डिवाइस डिज़ाइनरों को यह भी विचार करना चाहिए कि क्या IoT डिवाइस इंटरनेट आउटेज या स्थान के कारण सिग्नल की हानि के दौरान उपयोग किया जा सकता है। एक स्मार्ट थर्मोस्टेट को कुछ सीमित निर्णय लेने में सक्षम होना चाहिए ताकि यदि यह क्लाउड को टेलीमेट्री नहीं भेज सकता है, तो भी हीटिंग को नियंत्रित किया जा सके। + +[![यह फेरारी ब्रिक हो गया क्योंकि किसी ने इसे भूमिगत अपग्रेड करने की कोशिश की जहां कोई सेल रिसेप्शन नहीं था](../../../../../translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.hi.png)](https://twitter.com/internetofshit/status/1315736960082808832) + +MQTT के लिए कनेक्टिविटी के नुकसान को संभालने के लिए, डिवाइस और सर्वर कोड को यह सुनिश्चित करने की जिम्मेदारी लेनी होगी कि संदेश डिलीवरी आवश्यक होने पर सुनिश्चित हो, उदाहरण के लिए सभी भेजे गए संदेशों को एक रिप्लाई टॉपिक पर अतिरिक्त संदेशों द्वारा उत्तर देने की आवश्यकता हो, और यदि नहीं, तो उन्हें मैन्युअल रूप से कतारबद्ध किया जाए ताकि बाद में रिप्ले किया जा सके। + +## कमांड्स + +कमांड वे संदेश हैं जो क्लाउड से डिवाइस को भेजे जाते हैं, उन्हें कुछ करने का निर्देश देते हैं। अधिकांश समय यह किसी प्रकार का आउटपुट देने के लिए एक एक्टुएटर के माध्यम से होता है, लेकिन यह डिवाइस के लिए एक निर्देश भी हो सकता है, जैसे कि रीबूट करना, या अतिरिक्त टेलीमेट्री एकत्र करना और इसे कमांड के उत्तर के रूप में वापस करना। + +![एक इंटरनेट कनेक्टेड थर्मोस्टेट को हीटिंग चालू करने का कमांड प्राप्त हो रहा है](../../../../../translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.hi.png) + +एक थर्मोस्टेट क्लाउड से हीटिंग चालू करने का कमांड प्राप्त कर सकता है। सभी सेंसरों से टेलीमेट्री डेटा के आधार पर, यदि क्लाउड सेवा ने तय किया है कि हीटिंग चालू होनी चाहिए, तो यह संबंधित कमांड भेजता है। + +### MQTT ब्रोकर्स को कमांड्स भेजें + +हमारे इंटरनेट नियंत्रित नाइटलाइट के लिए अगला कदम यह है कि सर्वर कोड IoT डिवाइस को प्रकाश स्तरों के आधार पर लाइट को नियंत्रित करने के लिए एक कमांड वापस भेजे। + +1. VS Code में सर्वर कोड खोलें + +1. `client_telemetry_topic` की घोषणा के बाद निम्नलिखित लाइन जोड़ें ताकि यह परिभाषित किया जा सके कि कौन से टॉपिक पर कमांड्स भेजे जाएं: + + ```python + server_command_topic = id + '/commands' + ``` + +1. `handle_telemetry` फ़ंक्शन के अंत में निम्नलिखित कोड जोड़ें: + + ```python + command = { 'led_on' : payload['light'] < 300 } + print("Sending message:", command) + + client.publish(server_command_topic, json.dumps(command)) + ``` + + यह कमांड टॉपिक पर एक JSON संदेश भेजता है जिसमें `led_on` का मान true या false होता है, यह इस पर निर्भर करता है कि प्रकाश 300 से कम है या नहीं। यदि प्रकाश 300 से कम है, तो true भेजा जाता है ताकि डिवाइस को LED चालू करने का निर्देश दिया जा सके। + +1. पहले की तरह कोड चलाएं + +1. अपने भौतिक या वर्चुअल डिवाइस द्वारा डिटेक्ट किए गए प्रकाश स्तरों को समायोजित करें। प्राप्त संदेश और भेजे गए कमांड्स टर्मिनल में लिखे जाएंगे: + + ```output + (.venv) ➜ nightlight-server python app.py + Message received: {'light': 0} + Sending message: {'led_on': True} + Message received: {'light': 400} + Sending message: {'led_on': False} + ``` + +> 💁 टेलीमेट्री और कमांड्स एक ही टॉपिक पर भेजे जा रहे हैं। इसका मतलब है कि कई डिवाइसों से टेलीमेट्री एक ही टेलीमेट्री टॉपिक पर दिखाई देगी, और कई डिवाइसों को भेजे गए कमांड्स एक ही कमांड्स टॉपिक पर दिखाई देंगे। यदि आप किसी विशिष्ट डिवाइस को कमांड भेजना चाहते हैं, तो आप कई टॉपिक्स का उपयोग कर सकते हैं, जिन्हें एक यूनिक डिवाइस आईडी के साथ नामित किया गया है, जैसे `/commands/device1`, `/commands/device2`। इस तरह एक डिवाइस केवल उन संदेशों को सुन सकता है जो केवल उस एक डिवाइस के लिए हैं। + +> 💁 आप इस कोड को [code-commands/server](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/server) फ़ोल्डर में पा सकते हैं। + +### IoT डिवाइस पर कमांड्स को संभालें + +अब जब सर्वर से कमांड्स भेजे जा रहे हैं, तो आप अब कोड को IoT डिवाइस में जोड़ सकते हैं ताकि उन्हें संभाला जा सके और LED को नियंत्रित किया जा सके। + +MQTT ब्रोकर्स से कमांड्स सुनने के लिए नीचे दिए गए संबंधित चरण का पालन करें: + +* [Arduino - Wio Terminal](wio-terminal-commands.md) +* [सिंगल-बोर्ड कंप्यूटर - Raspberry Pi/वर्चुअल IoT डिवाइस](single-board-computer-commands.md) + +एक बार यह कोड लिखा और चल रहा हो, प्रकाश स्तरों को बदलने के साथ प्रयोग करें। सर्वर और डिवाइस से आउटपुट देखें, और जैसे ही आप प्रकाश स्तर बदलते हैं, LED को देखें। + +### कनेक्टिविटी का नुकसान + +यदि किसी IoT डिवाइस को ऑफलाइन होने पर क्लाउड सेवा को कमांड भेजने की आवश्यकता हो, तो उसे क्या करना चाहिए? फिर से, जवाब है - यह निर्भर करता है। + +यदि नवीनतम कमांड पहले वाले को ओवरराइड करता है, तो पहले वाले को शायद अनदेखा किया जा सकता है। यदि क्लाउड सेवा हीटिंग चालू करने का कमांड भेजती है, फिर इसे बंद करने का कमांड भेजती है, तो चालू करने का कमांड अनदेखा किया जा सकता है और पुनः नहीं भेजा जा सकता। + +यदि कमांड्स को क्रम में प्रोसेस करने की आवश्यकता है, जैसे कि एक रोबोट आर्म को ऊपर ले जाना, फिर एक ग्रैबर को बंद करना, तो उन्हें कनेक्टिविटी बहाल +इन उपकरणों के बारे में सोचें, वे कौन से संदेश भेज या प्राप्त कर सकते हैं। वे कौन सा टेलीमेट्री डेटा भेजते हैं? वे कौन से संदेश या कमांड प्राप्त कर सकते हैं? क्या आपको लगता है कि वे सुरक्षित हैं? + +## पोस्ट-लेक्चर क्विज़ + +[पोस्ट-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/8) + +## समीक्षा और स्व-अध्ययन + +MQTT के बारे में अधिक पढ़ें [MQTT विकिपीडिया पेज](https://wikipedia.org/wiki/MQTT) पर। + +खुद एक MQTT ब्रोकर चलाने की कोशिश करें [Mosquitto](https://www.mosquitto.org) का उपयोग करके और अपने IoT डिवाइस और सर्वर कोड से इसे कनेक्ट करें। + +> 💁 टिप - डिफ़ॉल्ट रूप से Mosquitto गुमनाम कनेक्शन (यानी बिना उपयोगकर्ता नाम और पासवर्ड के कनेक्शन) की अनुमति नहीं देता है, और उस कंप्यूटर के बाहर से कनेक्शन की अनुमति नहीं देता जिस पर यह चल रहा है। +> आप इसे [`mosquitto.conf` कॉन्फ़िग फाइल](https://www.mosquitto.org/man/mosquitto-conf-5.html) के साथ ठीक कर सकते हैं, जिसमें निम्नलिखित हो: +> +> ```sh +> listener 1883 0.0.0.0 +> allow_anonymous true +> ``` + +## असाइनमेंट + +[MQTT की तुलना अन्य संचार प्रोटोकॉल के साथ करें](assignment.md) + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/4-connect-internet/assignment.md b/translations/hi/1-getting-started/lessons/4-connect-internet/assignment.md new file mode 100644 index 00000000..52c00ac0 --- /dev/null +++ b/translations/hi/1-getting-started/lessons/4-connect-internet/assignment.md @@ -0,0 +1,26 @@ + +# MQTT की तुलना अन्य संचार प्रोटोकॉल्स से करें + +## निर्देश + +इस पाठ में MQTT को एक संचार प्रोटोकॉल के रूप में कवर किया गया। अन्य प्रोटोकॉल्स में AMQP और HTTP/HTTPS शामिल हैं। + +इन दोनों पर शोध करें और MQTT के साथ उनकी तुलना करें। पावर उपयोग, सुरक्षा, और संदेश स्थायित्व पर विचार करें यदि कनेक्शन टूट जाए। + +## मूल्यांकन मानदंड + +| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | +| -------- | --------- | -------- | ----------------- | +| AMQP की तुलना MQTT से करें | AMQP और MQTT की तुलना और विरोधाभास करने में सक्षम है और पावर, सुरक्षा, और संदेश स्थायित्व को कवर करता है। | AMQP और MQTT की तुलना और विरोधाभास करने में आंशिक रूप से सक्षम है और पावर, सुरक्षा, और संदेश स्थायित्व में से दो को कवर करता है। | AMQP और MQTT की तुलना और विरोधाभास करने में आंशिक रूप से सक्षम है और पावर, सुरक्षा, और संदेश स्थायित्व में से एक को कवर करता है। | +| HTTP/HTTPS की तुलना MQTT से करें | HTTP/HTTPS और MQTT की तुलना और विरोधाभास करने में सक्षम है और पावर, सुरक्षा, और संदेश स्थायित्व को कवर करता है। | HTTP/HTTPS और MQTT की तुलना और विरोधाभास करने में आंशिक रूप से सक्षम है और पावर, सुरक्षा, और संदेश स्थायित्व में से दो को कवर करता है। | HTTP/HTTPS और MQTT की तुलना और विरोधाभास करने में आंशिक रूप से सक्षम है और पावर, सुरक्षा, और संदेश स्थायित्व में से एक को कवर करता है। | + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md b/translations/hi/1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md new file mode 100644 index 00000000..a99e9e17 --- /dev/null +++ b/translations/hi/1-getting-started/lessons/4-connect-internet/single-board-computer-commands.md @@ -0,0 +1,65 @@ + +# इंटरनेट पर अपनी नाइटलाइट को नियंत्रित करें - वर्चुअल IoT हार्डवेयर और रास्पबेरी पाई + +इस पाठ के इस भाग में, आप अपने रास्पबेरी पाई या वर्चुअल IoT डिवाइस पर MQTT ब्रोकर्स से भेजे गए कमांड्स को सब्सक्राइब करेंगे। + +## कमांड्स को सब्सक्राइब करें + +अगला कदम MQTT ब्रोकर्स से भेजे गए कमांड्स को सब्सक्राइब करना और उनका जवाब देना है। + +### कार्य + +कमांड्स को सब्सक्राइब करें। + +1. VS Code में नाइटलाइट प्रोजेक्ट खोलें। + +1. यदि आप वर्चुअल IoT डिवाइस का उपयोग कर रहे हैं, तो सुनिश्चित करें कि टर्मिनल वर्चुअल एनवायरनमेंट चला रहा है। यदि आप रास्पबेरी पाई का उपयोग कर रहे हैं, तो आप वर्चुअल एनवायरनमेंट का उपयोग नहीं करेंगे। + +1. `client_telemetry_topic` की परिभाषा के बाद निम्नलिखित कोड जोड़ें: + + ```python + server_command_topic = id + '/commands' + ``` + + `server_command_topic` वह MQTT टॉपिक है जिसे डिवाइस LED कमांड्स प्राप्त करने के लिए सब्सक्राइब करेगा। + +1. मुख्य लूप के ठीक ऊपर, `mqtt_client.loop_start()` लाइन के बाद निम्नलिखित कोड जोड़ें: + + ```python + def handle_command(client, userdata, message): + payload = json.loads(message.payload.decode()) + print("Message received:", payload) + + if payload['led_on']: + led.on() + else: + led.off() + + mqtt_client.subscribe(server_command_topic) + mqtt_client.on_message = handle_command + ``` + + यह कोड एक फ़ंक्शन, `handle_command`, को परिभाषित करता है जो एक संदेश को JSON डॉक्यूमेंट के रूप में पढ़ता है और `led_on` प्रॉपर्टी के मान को देखता है। यदि इसे `True` पर सेट किया गया है, तो LED चालू हो जाती है, अन्यथा यह बंद हो जाती है। + + MQTT क्लाइंट उस टॉपिक पर सब्सक्राइब करता है जिस पर सर्वर संदेश भेजेगा और जब कोई संदेश प्राप्त होता है तो `handle_command` फ़ंक्शन को कॉल करता है। + + > 💁 `on_message` हैंडलर सभी सब्सक्राइब किए गए टॉपिक्स के लिए कॉल किया जाता है। यदि आप बाद में ऐसा कोड लिखते हैं जो कई टॉपिक्स को सुनता है, तो आप उस टॉपिक को प्राप्त कर सकते हैं जिस पर संदेश भेजा गया था, `message` ऑब्जेक्ट से जो हैंडलर फ़ंक्शन को पास किया गया है। + +1. उसी तरह कोड चलाएं जैसे आपने असाइनमेंट के पिछले भाग से कोड चलाया था। यदि आप वर्चुअल IoT डिवाइस का उपयोग कर रहे हैं, तो सुनिश्चित करें कि CounterFit ऐप चल रहा है और लाइट सेंसर और LED सही पिन पर बनाए गए हैं। + +1. अपने भौतिक या वर्चुअल डिवाइस द्वारा डिटेक्ट किए गए लाइट लेवल को समायोजित करें। प्राप्त किए जा रहे संदेश और भेजे जा रहे कमांड्स टर्मिनल पर लिखे जाएंगे। लाइट लेवल के अनुसार LED चालू और बंद हो जाएगी। + +> 💁 आप इस कोड को [code-commands/virtual-device](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/virtual-device) फोल्डर या [code-commands/pi](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/pi) फोल्डर में पा सकते हैं। + +😀 आपने सफलतापूर्वक अपने डिवाइस को MQTT ब्रोकर्स से कमांड्स का जवाब देने के लिए कोड किया है। + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md b/translations/hi/1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md new file mode 100644 index 00000000..a5be0877 --- /dev/null +++ b/translations/hi/1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md @@ -0,0 +1,91 @@ + +# इंटरनेट के माध्यम से अपनी नाइटलाइट को नियंत्रित करें - वर्चुअल IoT हार्डवेयर और रास्पबेरी पाई + +IoT डिवाइस को *test.mosquitto.org* के साथ MQTT का उपयोग करके टेलीमेट्री मान भेजने और लाइट सेंसर रीडिंग के साथ LED को नियंत्रित करने के लिए कमांड प्राप्त करने के लिए कोड किया जाना चाहिए। + +इस पाठ के इस भाग में, आप अपने रास्पबेरी पाई या वर्चुअल IoT डिवाइस को एक MQTT ब्रोकर्स से कनेक्ट करेंगे। + +## MQTT क्लाइंट पैकेज इंस्टॉल करें + +MQTT ब्रोकर्स के साथ संवाद करने के लिए, आपको अपने पाई पर या वर्चुअल डिवाइस का उपयोग कर रहे हैं तो वर्चुअल वातावरण में एक MQTT लाइब्रेरी पिप पैकेज इंस्टॉल करना होगा। + +### कार्य + +पिप पैकेज इंस्टॉल करें + +1. VS Code में नाइटलाइट प्रोजेक्ट खोलें। + +1. यदि आप वर्चुअल IoT डिवाइस का उपयोग कर रहे हैं, तो सुनिश्चित करें कि टर्मिनल वर्चुअल वातावरण चला रहा है। यदि आप रास्पबेरी पाई का उपयोग कर रहे हैं, तो आप वर्चुअल वातावरण का उपयोग नहीं करेंगे। + +1. MQTT पिप पैकेज इंस्टॉल करने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + pip3 install paho-mqtt + ``` + +## डिवाइस कोड करें + +डिवाइस को कोड करने के लिए तैयार है। + +### कार्य + +डिवाइस कोड लिखें। + +1. `app.py` फ़ाइल के शीर्ष पर निम्नलिखित इम्पोर्ट जोड़ें: + + ```python + import paho.mqtt.client as mqtt + ``` + + `paho.mqtt.client` लाइब्रेरी आपके ऐप को MQTT के माध्यम से संवाद करने की अनुमति देती है। + +1. लाइट सेंसर और LED की परिभाषाओं के बाद निम्नलिखित कोड जोड़ें: + + ```python + id = '' + + client_name = id + 'nightlight_client' + ``` + + `` को एक यूनिक ID से बदलें, जो इस डिवाइस क्लाइंट का नाम होगा और बाद में उन टॉपिक्स के लिए उपयोग किया जाएगा जिन्हें यह डिवाइस प्रकाशित और सब्सक्राइब करेगा। *test.mosquitto.org* ब्रोकर्स सार्वजनिक है और कई लोग इसका उपयोग करते हैं, जिनमें इस असाइनमेंट पर काम कर रहे अन्य छात्र भी शामिल हैं। एक यूनिक MQTT क्लाइंट नाम और टॉपिक नाम रखने से यह सुनिश्चित होता है कि आपका कोड किसी और के कोड से टकराएगा नहीं। आपको इस ID की आवश्यकता इस असाइनमेंट के बाद के हिस्से में सर्वर कोड बनाते समय भी होगी। + + > 💁 आप [GUIDGen](https://www.guidgen.com) जैसी वेबसाइट का उपयोग करके एक यूनिक ID जनरेट कर सकते हैं। + + `client_name` इस MQTT क्लाइंट का ब्रोकर्स पर एक यूनिक नाम है। + +1. इस नए कोड के नीचे निम्नलिखित कोड जोड़ें ताकि एक MQTT क्लाइंट ऑब्जेक्ट बनाया जा सके और MQTT ब्रोकर्स से कनेक्ट किया जा सके: + + ```python + mqtt_client = mqtt.Client(client_name) + mqtt_client.connect('test.mosquitto.org') + + mqtt_client.loop_start() + + print("MQTT connected!") + ``` + + यह कोड क्लाइंट ऑब्जेक्ट बनाता है, सार्वजनिक MQTT ब्रोकर्स से कनेक्ट करता है, और एक प्रोसेसिंग लूप शुरू करता है जो बैकग्राउंड थ्रेड में चलता है और किसी भी सब्सक्राइब किए गए टॉपिक्स पर संदेशों को सुनता है। + +1. कोड को उसी तरह चलाएं जैसे आपने असाइनमेंट के पिछले भाग से कोड चलाया था। यदि आप वर्चुअल IoT डिवाइस का उपयोग कर रहे हैं, तो सुनिश्चित करें कि CounterFit ऐप चल रहा है और लाइट सेंसर और LED को सही पिन पर बनाया गया है। + + ```output + (.venv) ➜ nightlight python app.py + MQTT connected! + Light level: 0 + Light level: 0 + ``` + +> 💁 आप इस कोड को [code-mqtt/virtual-device](../../../../../1-getting-started/lessons/4-connect-internet/code-mqtt/virtual-device) फोल्डर या [code-mqtt/pi](../../../../../1-getting-started/lessons/4-connect-internet/code-mqtt/pi) फोल्डर में पा सकते हैं। + +😀 आपने सफलतापूर्वक अपने डिवाइस को एक MQTT ब्रोकर्स से कनेक्ट कर लिया है। + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md b/translations/hi/1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md new file mode 100644 index 00000000..2b7d51fe --- /dev/null +++ b/translations/hi/1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md @@ -0,0 +1,72 @@ + +# इंटरनेट के माध्यम से अपनी नाइटलाइट को नियंत्रित करें - वर्चुअल IoT हार्डवेयर और रास्पबेरी पाई + +इस पाठ के इस भाग में, आप अपने रास्पबेरी पाई या वर्चुअल IoT डिवाइस से प्रकाश स्तर के साथ टेलीमेट्री को एक MQTT ब्रोकर्स को भेजेंगे। + +## टेलीमेट्री प्रकाशित करें + +अगला कदम टेलीमेट्री के साथ एक JSON दस्तावेज़ बनाना और इसे MQTT ब्रोकर्स को भेजना है। + +### कार्य + +MQTT ब्रोकर्स को टेलीमेट्री प्रकाशित करें। + +1. VS Code में नाइटलाइट प्रोजेक्ट खोलें। + +1. यदि आप वर्चुअल IoT डिवाइस का उपयोग कर रहे हैं, तो सुनिश्चित करें कि टर्मिनल वर्चुअल वातावरण चला रहा है। यदि आप रास्पबेरी पाई का उपयोग कर रहे हैं, तो आप वर्चुअल वातावरण का उपयोग नहीं करेंगे। + +1. `app.py` फ़ाइल के शीर्ष पर निम्नलिखित इम्पोर्ट जोड़ें: + + ```python + import json + ``` + + `json` लाइब्रेरी का उपयोग टेलीमेट्री को JSON दस्तावेज़ के रूप में एन्कोड करने के लिए किया जाता है। + +1. `client_name` घोषणा के बाद निम्नलिखित जोड़ें: + + ```python + client_telemetry_topic = id + '/telemetry' + ``` + + `client_telemetry_topic` वह MQTT टॉपिक है जिस पर डिवाइस प्रकाश स्तर को प्रकाशित करेगा। + +1. फ़ाइल के अंत में `while True:` लूप की सामग्री को निम्नलिखित से बदलें: + + ```python + while True: + light = light_sensor.light + telemetry = json.dumps({'light' : light}) + + print("Sending telemetry ", telemetry) + + mqtt_client.publish(client_telemetry_topic, telemetry) + + time.sleep(5) + ``` + + यह कोड प्रकाश स्तर को एक JSON दस्तावेज़ में पैक करता है और इसे MQTT ब्रोकर्स को प्रकाशित करता है। इसके बाद यह संदेश भेजने की आवृत्ति को कम करने के लिए रुकता है। + +1. उसी तरह कोड चलाएं जैसे आपने असाइनमेंट के पिछले भाग से कोड चलाया था। यदि आप वर्चुअल IoT डिवाइस का उपयोग कर रहे हैं, तो सुनिश्चित करें कि CounterFit ऐप चल रहा है और लाइट सेंसर और LED को सही पिन पर बनाया गया है। + + ```output + (.venv) ➜ nightlight python app.py + MQTT connected! + Sending telemetry {"light": 0} + Sending telemetry {"light": 0} + ``` + +> 💁 आप इस कोड को [code-telemetry/virtual-device](../../../../../1-getting-started/lessons/4-connect-internet/code-telemetry/virtual-device) फ़ोल्डर या [code-telemetry/pi](../../../../../1-getting-started/lessons/4-connect-internet/code-telemetry/pi) फ़ोल्डर में पा सकते हैं। + +😀 आपने सफलतापूर्वक अपने डिवाइस से टेलीमेट्री भेज दी है। + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md b/translations/hi/1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md new file mode 100644 index 00000000..fe8ebc80 --- /dev/null +++ b/translations/hi/1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md @@ -0,0 +1,91 @@ + +# इंटरनेट के माध्यम से अपनी नाइटलाइट को नियंत्रित करें - Wio Terminal + +इस पाठ के इस भाग में, आप अपने Wio Terminal को MQTT ब्रोकर्स से भेजे गए कमांड्स को सब्सक्राइब करेंगे। + +## कमांड्स को सब्सक्राइब करें + +अगला कदम MQTT ब्रोकर्स से भेजे गए कमांड्स को सब्सक्राइब करना और उनका जवाब देना है। + +### कार्य + +कमांड्स को सब्सक्राइब करें। + +1. VS Code में नाइटलाइट प्रोजेक्ट खोलें। + +1. `config.h` फाइल के अंत में निम्नलिखित कोड जोड़ें ताकि कमांड्स के लिए टॉपिक नाम को परिभाषित किया जा सके: + + ```cpp + const string SERVER_COMMAND_TOPIC = ID + "/commands"; + ``` + + `SERVER_COMMAND_TOPIC` वह टॉपिक है जिसे डिवाइस LED कमांड्स प्राप्त करने के लिए सब्सक्राइब करेगा। + +1. `reconnectMQTTClient` फंक्शन के अंत में निम्नलिखित लाइन जोड़ें ताकि MQTT क्लाइंट के फिर से कनेक्ट होने पर कमांड टॉपिक को सब्सक्राइब किया जा सके: + + ```cpp + client.subscribe(SERVER_COMMAND_TOPIC.c_str()); + ``` + +1. `reconnectMQTTClient` फंक्शन के नीचे निम्नलिखित कोड जोड़ें: + + ```cpp + void clientCallback(char *topic, uint8_t *payload, unsigned int length) + { + char buff[length + 1]; + for (int i = 0; i < length; i++) + { + buff[i] = (char)payload[i]; + } + buff[length] = '\0'; + + Serial.print("Message received:"); + Serial.println(buff); + + DynamicJsonDocument doc(1024); + deserializeJson(doc, buff); + JsonObject obj = doc.as(); + + bool led_on = obj["led_on"]; + + if (led_on) + digitalWrite(D0, HIGH); + else + digitalWrite(D0, LOW); + } + ``` + + यह फंक्शन वह कॉलबैक होगा जिसे MQTT क्लाइंट सर्वर से कोई संदेश प्राप्त होने पर कॉल करेगा। + + संदेश unsigned 8-बिट इंटीजर की एक ऐरे के रूप में प्राप्त होता है, इसलिए इसे टेक्स्ट के रूप में ट्रीट करने के लिए एक कैरेक्टर ऐरे में कन्वर्ट करना होगा। + + संदेश में एक JSON डॉक्यूमेंट होता है, जिसे ArduinoJson लाइब्रेरी का उपयोग करके डिकोड किया जाता है। JSON डॉक्यूमेंट की `led_on` प्रॉपर्टी को पढ़ा जाता है, और उसके मान के आधार पर LED को चालू या बंद किया जाता है। + +1. `createMQTTClient` फंक्शन में निम्नलिखित कोड जोड़ें: + + ```cpp + client.setCallback(clientCallback); + ``` + + यह कोड `clientCallback` को MQTT ब्रोकर्स से संदेश प्राप्त होने पर कॉल करने के लिए सेट करता है। + + > 💁 `clientCallback` हैंडलर सभी सब्सक्राइब किए गए टॉपिक्स के लिए कॉल किया जाता है। यदि आप बाद में ऐसा कोड लिखते हैं जो कई टॉपिक्स को सुनता है, तो आप उस टॉपिक को प्राप्त कर सकते हैं जिस पर संदेश भेजा गया था, `topic` पैरामीटर से जो कॉलबैक फंक्शन को पास किया जाता है। + +1. कोड को अपने Wio Terminal पर अपलोड करें, और सीरियल मॉनिटर का उपयोग करके देखें कि लाइट लेवल्स MQTT ब्रोकर्स को कैसे भेजे जा रहे हैं। + +1. अपने फिजिकल या वर्चुअल डिवाइस द्वारा डिटेक्ट किए गए लाइट लेवल्स को एडजस्ट करें। आप देखेंगे कि टर्मिनल में संदेश प्राप्त हो रहे हैं और कमांड्स भेजे जा रहे हैं। आप यह भी देखेंगे कि लाइट लेवल के आधार पर LED चालू और बंद हो रही है। + +> 💁 आप इस कोड को [code-commands/wio-terminal](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/wio-terminal) फोल्डर में पा सकते हैं। + +😀 आपने सफलतापूर्वक अपने डिवाइस को MQTT ब्रोकर्स से कमांड्स का जवाब देने के लिए कोड किया है। + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md b/translations/hi/1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md new file mode 100644 index 00000000..80c1d06e --- /dev/null +++ b/translations/hi/1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md @@ -0,0 +1,249 @@ + +# इंटरनेट के जरिए अपनी नाइटलाइट को नियंत्रित करें - Wio Terminal + +IoT डिवाइस को *test.mosquitto.org* के साथ MQTT का उपयोग करके टेलीमेट्री डेटा भेजने और लाइट सेंसर रीडिंग के साथ LED को नियंत्रित करने के लिए कमांड प्राप्त करने के लिए कोड किया जाना चाहिए। + +इस पाठ के इस भाग में, आप अपने Wio Terminal को एक MQTT ब्रोकर्स से कनेक्ट करेंगे। + +## WiFi और MQTT Arduino लाइब्रेरी इंस्टॉल करें + +MQTT ब्रोकर्स के साथ संवाद करने के लिए, आपको कुछ Arduino लाइब्रेरी इंस्टॉल करनी होंगी ताकि Wio Terminal के WiFi चिप का उपयोग किया जा सके और MQTT के साथ संवाद किया जा सके। Arduino डिवाइसों के लिए विकास करते समय, आप कई प्रकार की लाइब्रेरी का उपयोग कर सकते हैं, जो ओपन-सोर्स कोड प्रदान करती हैं और कई क्षमताओं को लागू करती हैं। Seeed Wio Terminal के लिए लाइब्रेरी प्रकाशित करता है, जो इसे WiFi के जरिए संवाद करने की अनुमति देती हैं। अन्य डेवलपर्स ने MQTT ब्रोकर्स के साथ संवाद करने के लिए लाइब्रेरी प्रकाशित की हैं, और आप अपने डिवाइस के साथ इनका उपयोग करेंगे। + +ये लाइब्रेरी सोर्स कोड के रूप में प्रदान की जाती हैं, जिन्हें PlatformIO में स्वचालित रूप से आयात किया जा सकता है और आपके डिवाइस के लिए संकलित किया जा सकता है। इस तरह Arduino लाइब्रेरी किसी भी डिवाइस पर काम करेंगी जो Arduino फ्रेमवर्क का समर्थन करती है, बशर्ते कि डिवाइस में उस लाइब्रेरी द्वारा आवश्यक कोई विशिष्ट हार्डवेयर हो। कुछ लाइब्रेरी, जैसे Seeed WiFi लाइब्रेरी, कुछ हार्डवेयर के लिए विशिष्ट होती हैं। + +लाइब्रेरी को वैश्विक रूप से इंस्टॉल किया जा सकता है और आवश्यकता पड़ने पर संकलित किया जा सकता है, या किसी विशिष्ट प्रोजेक्ट में। इस असाइनमेंट के लिए, लाइब्रेरी प्रोजेक्ट में इंस्टॉल की जाएंगी। + +✅ आप लाइब्रेरी प्रबंधन और लाइब्रेरी खोजने और इंस्टॉल करने के बारे में अधिक जानकारी [PlatformIO लाइब्रेरी डाक्यूमेंटेशन](https://docs.platformio.org/en/latest/librarymanager/index.html) में प्राप्त कर सकते हैं। + +### कार्य - WiFi और MQTT Arduino लाइब्रेरी इंस्टॉल करें + +Arduino लाइब्रेरी इंस्टॉल करें। + +1. VS Code में नाइटलाइट प्रोजेक्ट खोलें। + +1. `platformio.ini` फाइल के अंत में निम्नलिखित जोड़ें: + + ```ini + lib_deps = + seeed-studio/Seeed Arduino rpcWiFi @ 1.0.5 + seeed-studio/Seeed Arduino FS @ 2.1.1 + seeed-studio/Seeed Arduino SFUD @ 2.0.2 + seeed-studio/Seeed Arduino rpcUnified @ 2.1.3 + seeed-studio/Seeed_Arduino_mbedtls @ 3.0.1 + ``` + + यह Seeed WiFi लाइब्रेरी आयात करता है। `@ ` सिंटैक्स लाइब्रेरी के एक विशिष्ट संस्करण संख्या को संदर्भित करता है। + + > 💁 आप लाइब्रेरी के नवीनतम संस्करण का उपयोग करने के लिए `@ ` हटा सकते हैं, लेकिन यह गारंटी नहीं है कि बाद के संस्करण नीचे दिए गए कोड के साथ काम करेंगे। यहां दिया गया कोड इस संस्करण के साथ परीक्षण किया गया है। + + लाइब्रेरी जोड़ने के लिए आपको बस इतना ही करना है। अगली बार जब PlatformIO प्रोजेक्ट को बनाएगा, तो यह इन लाइब्रेरी के लिए सोर्स कोड डाउनलोड करेगा और इसे आपके प्रोजेक्ट में संकलित करेगा। + +1. `lib_deps` में निम्नलिखित जोड़ें: + + ```ini + knolleary/PubSubClient @ 2.8 + ``` + + यह [PubSubClient](https://github.com/knolleary/pubsubclient), एक Arduino MQTT क्लाइंट आयात करता है। + +## WiFi से कनेक्ट करें + +अब Wio Terminal को WiFi से कनेक्ट किया जा सकता है। + +### कार्य - WiFi से कनेक्ट करें + +Wio Terminal को WiFi से कनेक्ट करें। + +1. `src` फोल्डर में `config.h` नामक एक नई फाइल बनाएं। आप ऐसा `src` फोल्डर या उसके अंदर `main.cpp` फाइल का चयन करके और एक्सप्लोरर से **New file** बटन का चयन करके कर सकते हैं। यह बटन केवल तब दिखाई देता है जब आपका कर्सर एक्सप्लोरर पर होता है। + + ![नया फाइल बटन](../../../../../translated_images/vscode-new-file-button.182702340fe6723c8cbb4cfa1a9a9fb0d0a5227643b4e46b91ff67b07a39a92f.hi.png) + +1. इस फाइल में अपने WiFi क्रेडेंशियल्स के लिए कॉन्स्टेंट्स को परिभाषित करने के लिए निम्नलिखित कोड जोड़ें: + + ```cpp + #pragma once + + #include + + using namespace std; + + // WiFi credentials + const char *SSID = ""; + const char *PASSWORD = ""; + ``` + + `` को अपने WiFi के SSID से बदलें। `` को अपने WiFi पासवर्ड से बदलें। + +1. `main.cpp` फाइल खोलें। + +1. फाइल के शीर्ष पर निम्नलिखित `#include` निर्देश जोड़ें: + + ```cpp + #include + #include + #include + + #include "config.h" + ``` + + यह उन लाइब्रेरी के हेडर फाइल्स को शामिल करता है जिन्हें आपने पहले जोड़ा था, साथ ही कॉन्फ़िग हेडर फाइल को भी। ये हेडर फाइल्स PlatformIO को लाइब्रेरी से कोड लाने के लिए आवश्यक हैं। इन हेडर फाइल्स को स्पष्ट रूप से शामिल किए बिना, कुछ कोड संकलित नहीं होगा और आपको कंपाइलर त्रुटियां मिलेंगी। + +1. `setup` फंक्शन के ऊपर निम्नलिखित कोड जोड़ें: + + ```cpp + void connectWiFi() + { + while (WiFi.status() != WL_CONNECTED) + { + Serial.println("Connecting to WiFi.."); + WiFi.begin(SSID, PASSWORD); + delay(500); + } + + Serial.println("Connected!"); + } + ``` + + यह कोड तब तक लूप करता है जब तक डिवाइस WiFi से कनेक्ट नहीं हो जाता, और SSID और पासवर्ड का उपयोग करके कनेक्ट करने की कोशिश करता है। + +1. पिन्स को कॉन्फ़िगर करने के बाद `setup` फंक्शन के नीचे इस फंक्शन को कॉल करें: + + ```cpp + connectWiFi(); + ``` + +1. इस कोड को अपने डिवाइस पर अपलोड करें और जांचें कि WiFi कनेक्शन काम कर रहा है। आपको सीरियल मॉनिटर में यह देखना चाहिए: + + ```output + > Executing task: platformio device monitor < + + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem1101 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + Connecting to WiFi.. + Connected! + ``` + +## MQTT से कनेक्ट करें + +WiFi से कनेक्ट होने के बाद, Wio Terminal MQTT ब्रोकर्स से कनेक्ट हो सकता है। + +### कार्य - MQTT से कनेक्ट करें + +MQTT ब्रोकर्स से कनेक्ट करें। + +1. MQTT ब्रोकर्स के कनेक्शन विवरण को परिभाषित करने के लिए `config.h` फाइल के अंत में निम्नलिखित कोड जोड़ें: + + ```cpp + // MQTT settings + const string ID = ""; + + const string BROKER = "test.mosquitto.org"; + const string CLIENT_NAME = ID + "nightlight_client"; + ``` + + `` को एक यूनिक ID से बदलें, जो इस डिवाइस क्लाइंट का नाम होगा और बाद में उन टॉपिक्स के लिए उपयोग किया जाएगा जिन्हें यह डिवाइस प्रकाशित और सब्सक्राइब करेगा। *test.mosquitto.org* ब्रोकर्स सार्वजनिक है और कई लोग इसका उपयोग करते हैं, जिनमें इस असाइनमेंट पर काम कर रहे अन्य छात्र भी शामिल हैं। एक यूनिक MQTT क्लाइंट नाम और टॉपिक नाम सुनिश्चित करता है कि आपका कोड किसी और के कोड से टकराएगा नहीं। आपको इस ID की आवश्यकता बाद में सर्वर कोड बनाते समय भी होगी। + + > 💁 आप [GUIDGen](https://www.guidgen.com) जैसी वेबसाइट का उपयोग करके एक यूनिक ID जनरेट कर सकते हैं। + + `BROKER` MQTT ब्रोकर्स का URL है। + + `CLIENT_NAME` इस MQTT क्लाइंट का ब्रोकर्स पर एक यूनिक नाम है। + +1. `main.cpp` फाइल खोलें, और `connectWiFi` फंक्शन के नीचे और `setup` फंक्शन के ऊपर निम्नलिखित कोड जोड़ें: + + ```cpp + WiFiClient wioClient; + PubSubClient client(wioClient); + ``` + + यह कोड Wio Terminal WiFi लाइब्रेरी का उपयोग करके एक WiFi क्लाइंट बनाता है और इसका उपयोग एक MQTT क्लाइंट बनाने के लिए करता है। + +1. इस कोड के नीचे निम्नलिखित जोड़ें: + + ```cpp + void reconnectMQTTClient() + { + while (!client.connected()) + { + Serial.print("Attempting MQTT connection..."); + + if (client.connect(CLIENT_NAME.c_str())) + { + Serial.println("connected"); + } + else + { + Serial.print("Retying in 5 seconds - failed, rc="); + Serial.println(client.state()); + + delay(5000); + } + } + } + ``` + + यह फंक्शन MQTT ब्रोकर्स से कनेक्शन का परीक्षण करता है और यदि कनेक्टेड नहीं है तो फिर से कनेक्ट करता है। यह तब तक लूप करता है जब तक यह कनेक्ट नहीं हो जाता और कॉन्फ़िग हेडर फाइल में परिभाषित यूनिक क्लाइंट नाम का उपयोग करके कनेक्ट करने का प्रयास करता है। + + यदि कनेक्शन विफल हो जाता है, तो यह 5 सेकंड बाद फिर से प्रयास करता है। + +1. `reconnectMQTTClient` फंक्शन के नीचे निम्नलिखित कोड जोड़ें: + + ```cpp + void createMQTTClient() + { + client.setServer(BROKER.c_str(), 1883); + reconnectMQTTClient(); + } + ``` + + यह कोड क्लाइंट के लिए MQTT ब्रोकर्स सेट करता है, साथ ही एक कॉलबैक सेट करता है जब कोई संदेश प्राप्त होता है। फिर यह ब्रोकर्स से कनेक्ट करने का प्रयास करता है। + +1. WiFi कनेक्ट होने के बाद `setup` फंक्शन में `createMQTTClient` फंक्शन को कॉल करें। + +1. पूरे `loop` फंक्शन को निम्नलिखित से बदलें: + + ```cpp + void loop() + { + reconnectMQTTClient(); + client.loop(); + + delay(2000); + } + ``` + + यह कोड MQTT ब्रोकर्स से फिर से कनेक्ट करता है। ये कनेक्शन आसानी से टूट सकते हैं, इसलिए नियमित रूप से जांचना और आवश्यकता पड़ने पर फिर से कनेक्ट करना उचित है। फिर यह MQTT क्लाइंट पर `loop` मेथड को कॉल करता है ताकि किसी भी संदेश को प्रोसेस किया जा सके जो सब्सक्राइब किए गए टॉपिक पर आ रहे हैं। यह ऐप सिंगल-थ्रेडेड है, इसलिए संदेश बैकग्राउंड थ्रेड पर प्राप्त नहीं किए जा सकते, इसलिए मुख्य थ्रेड पर नेटवर्क कनेक्शन पर प्रतीक्षा कर रहे किसी भी संदेश को प्रोसेस करने के लिए समय आवंटित करना आवश्यक है। + + अंत में, 2 सेकंड की देरी सुनिश्चित करती है कि लाइट लेवल बहुत बार नहीं भेजे जाते और डिवाइस की पावर खपत कम हो जाती है। + +1. कोड को अपने Wio Terminal पर अपलोड करें, और डिवाइस को WiFi और MQTT से कनेक्ट होते हुए देखने के लिए सीरियल मॉनिटर का उपयोग करें। + + ```output + > Executing task: platformio device monitor < + + source /Users/jimbennett/GitHub/IoT-For-Beginners/1-getting-started/lessons/4-connect-internet/code-mqtt/wio-terminal/nightlight/.venv/bin/activate + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem1201 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + Connecting to WiFi.. + Connected! + Attempting MQTT connection...connected + ``` + +> 💁 आप इस कोड को [code-mqtt/wio-terminal](../../../../../1-getting-started/lessons/4-connect-internet/code-mqtt/wio-terminal) फोल्डर में पा सकते हैं। + +😀 आपने सफलतापूर्वक अपने डिवाइस को एक MQTT ब्रोकर्स से कनेक्ट कर लिया है। + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md b/translations/hi/1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md new file mode 100644 index 00000000..f00e7269 --- /dev/null +++ b/translations/hi/1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md @@ -0,0 +1,91 @@ + +# इंटरनेट के माध्यम से अपनी नाइटलाइट को नियंत्रित करें - Wio Terminal + +इस पाठ के इस भाग में, आप अपने Wio Terminal से प्रकाश स्तरों के साथ टेलीमेट्री को MQTT ब्रोकर्स पर भेजेंगे। + +## JSON Arduino लाइब्रेरीज़ इंस्टॉल करें + +MQTT पर संदेश भेजने का एक लोकप्रिय तरीका JSON का उपयोग करना है। JSON के लिए एक Arduino लाइब्रेरी है जो JSON दस्तावेज़ों को पढ़ने और लिखने को आसान बनाती है। + +### कार्य + +Arduino JSON लाइब्रेरी इंस्टॉल करें। + +1. VS Code में नाइटलाइट प्रोजेक्ट खोलें। + +1. `platformio.ini` फाइल में `lib_deps` सूची में निम्नलिखित को एक अतिरिक्त लाइन के रूप में जोड़ें: + + ```ini + bblanchon/ArduinoJson @ 6.17.3 + ``` + + यह [ArduinoJson](https://arduinojson.org) को इंपोर्ट करता है, जो एक Arduino JSON लाइब्रेरी है। + +## टेलीमेट्री प्रकाशित करें + +अगला कदम टेलीमेट्री के साथ एक JSON दस्तावेज़ बनाना और इसे MQTT ब्रोकर्स पर भेजना है। + +### कार्य - टेलीमेट्री प्रकाशित करें + +MQTT ब्रोकर्स पर टेलीमेट्री प्रकाशित करें। + +1. MQTT ब्रोकर्स के लिए टेलीमेट्री टॉपिक नाम को परिभाषित करने के लिए `config.h` फाइल के नीचे निम्नलिखित कोड जोड़ें: + + ```cpp + const string CLIENT_TELEMETRY_TOPIC = ID + "/telemetry"; + ``` + + `CLIENT_TELEMETRY_TOPIC` वह टॉपिक है जिस पर डिवाइस प्रकाश स्तरों को प्रकाशित करेगा। + +1. `main.cpp` फाइल खोलें। + +1. फाइल के शीर्ष पर निम्नलिखित `#include` निर्देश जोड़ें: + + ```cpp + #include + ``` + +1. `loop` फंक्शन के अंदर, `delay` से ठीक पहले निम्नलिखित कोड जोड़ें: + + ```cpp + int light = analogRead(WIO_LIGHT); + + DynamicJsonDocument doc(1024); + doc["light"] = light; + + string telemetry; + serializeJson(doc, telemetry); + + Serial.print("Sending telemetry "); + Serial.println(telemetry.c_str()); + + client.publish(CLIENT_TELEMETRY_TOPIC.c_str(), telemetry.c_str()); + ``` + + यह कोड प्रकाश स्तर को पढ़ता है और ArduinoJson का उपयोग करके इस स्तर के साथ एक JSON दस्तावेज़ बनाता है। फिर इसे एक स्ट्रिंग में सीरियलाइज़ किया जाता है और MQTT क्लाइंट द्वारा टेलीमेट्री MQTT टॉपिक पर प्रकाशित किया जाता है। + +1. कोड को अपने Wio Terminal पर अपलोड करें और सीरियल मॉनिटर का उपयोग करके देखें कि प्रकाश स्तर MQTT ब्रोकर्स पर भेजे जा रहे हैं: + + ```output + Connecting to WiFi.. + Connected! + Attempting MQTT connection...connected + Sending telemetry {"light":652} + Sending telemetry {"light":612} + Sending telemetry {"light":583} + ``` + +> 💁 आप इस कोड को [code-telemetry/wio-terminal](../../../../../1-getting-started/lessons/4-connect-internet/code-telemetry/wio-terminal) फोल्डर में पा सकते हैं। + +😀 आपने सफलतापूर्वक अपने डिवाइस से टेलीमेट्री भेज दी है। + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/README.md b/translations/hi/2-farm/README.md new file mode 100644 index 00000000..cf221037 --- /dev/null +++ b/translations/hi/2-farm/README.md @@ -0,0 +1,32 @@ + +# IoT के साथ खेती + +जैसे-जैसे जनसंख्या बढ़ती है, वैसे-वैसे कृषि पर दबाव भी बढ़ता है। उपलब्ध भूमि की मात्रा नहीं बदलती, लेकिन जलवायु बदलती रहती है - जिससे किसानों के लिए और भी चुनौतियाँ पैदा होती हैं, खासकर उन 2 अरब [आत्मनिर्भर किसानों](https://wikipedia.org/wiki/Subsistence_agriculture) के लिए जो अपने उगाए गए फसलों पर निर्भर रहते हैं ताकि वे खुद और अपने परिवार को भोजन दे सकें। IoT किसानों को यह निर्णय लेने में मदद कर सकता है कि क्या उगाना है और कब फसल काटनी है, उत्पादन बढ़ा सकता है, श्रम की मात्रा कम कर सकता है, और कीटों का पता लगाकर उनसे निपटने में मदद कर सकता है। + +इन 6 पाठों में आप सीखेंगे कि खेती को बेहतर और स्वचालित बनाने के लिए इंटरनेट ऑफ थिंग्स का उपयोग कैसे करें। + +> 💁 इन पाठों में कुछ क्लाउड संसाधनों का उपयोग किया जाएगा। यदि आप इस प्रोजेक्ट के सभी पाठ पूरे नहीं करते हैं, तो सुनिश्चित करें कि आप [अपने प्रोजेक्ट को साफ करें](../clean-up.md)। + +## विषय + +1. [IoT के साथ पौधों की वृद्धि का पूर्वानुमान लगाएं](lessons/1-predict-plant-growth/README.md) +1. [मिट्टी की नमी का पता लगाएं](lessons/2-detect-soil-moisture/README.md) +1. [स्वचालित पौधों की सिंचाई](lessons/3-automated-plant-watering/README.md) +1. [अपने पौधे को क्लाउड में स्थानांतरित करें](lessons/4-migrate-your-plant-to-the-cloud/README.md) +1. [अपने एप्लिकेशन लॉजिक को क्लाउड में स्थानांतरित करें](lessons/5-migrate-application-to-the-cloud/README.md) +1. [अपने पौधे को सुरक्षित रखें](lessons/6-keep-your-plant-secure/README.md) + +## श्रेय + +सभी पाठ [Jim Bennett](https://GitHub.com/JimBobBennett) द्वारा ♥️ के साथ लिखे गए हैं। + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/1-predict-plant-growth/README.md b/translations/hi/2-farm/lessons/1-predict-plant-growth/README.md new file mode 100644 index 00000000..91a5cb2c --- /dev/null +++ b/translations/hi/2-farm/lessons/1-predict-plant-growth/README.md @@ -0,0 +1,145 @@ + +## पौधों की वृद्धि की भविष्यवाणी IoT के साथ + +![इस पाठ का स्केच नोट](../../../../../translated_images/lesson-5.42b234299279d263143148b88ab4583861a32ddb03110c6c1120e41bb88b2592.hi.jpg) + +> स्केच नोट [नित्या नरसिम्हन](https://github.com/nitya) द्वारा। बड़े संस्करण के लिए छवि पर क्लिक करें। + +## व्याख्यान से पहले की प्रश्नोत्तरी + +[व्याख्यान से पहले की प्रश्नोत्तरी](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/9) + +## परिचय + +पौधों को बढ़ने के लिए कुछ चीजों की आवश्यकता होती है - पानी, कार्बन डाइऑक्साइड, पोषक तत्व, प्रकाश और गर्मी। इस पाठ में, आप वायु तापमान को मापकर पौधों की वृद्धि और परिपक्वता दर की गणना करना सीखेंगे। + +इस पाठ में हम निम्नलिखित विषयों को कवर करेंगे: + +* [डिजिटल कृषि](../../../../../2-farm/lessons/1-predict-plant-growth) +* [खेती में तापमान क्यों महत्वपूर्ण है?](../../../../../2-farm/lessons/1-predict-plant-growth) +* [परिवेश तापमान मापें](../../../../../2-farm/lessons/1-predict-plant-growth) +* [ग्रोइंग डिग्री डेज़ (GDD)](../../../../../2-farm/lessons/1-predict-plant-growth) +* [तापमान सेंसर डेटा का उपयोग करके GDD की गणना करें](../../../../../2-farm/lessons/1-predict-plant-growth) + +## डिजिटल कृषि + +डिजिटल कृषि खेती के तरीके को बदल रही है, जिसमें खेती से डेटा एकत्र करने, संग्रहीत करने और उसका विश्लेषण करने के लिए उपकरणों का उपयोग किया जाता है। वर्तमान में हम एक ऐसे युग में हैं जिसे वर्ल्ड इकोनॉमिक फोरम द्वारा 'चौथी औद्योगिक क्रांति' कहा गया है, और डिजिटल कृषि के उदय को 'चौथी कृषि क्रांति' या 'कृषि 4.0' के रूप में जाना जाता है। + +> 🎓 डिजिटल कृषि शब्द में 'कृषि मूल्य श्रृंखला' भी शामिल है, यानी खेत से लेकर टेबल तक की पूरी यात्रा। इसमें खाद्य गुणवत्ता को ट्रैक करना, जब इसे शिप और प्रोसेस किया जाता है, गोदाम और ई-कॉमर्स सिस्टम, यहां तक कि ट्रैक्टर किराए पर लेने वाले ऐप्स भी शामिल हैं! + +ये बदलाव किसानों को उपज बढ़ाने, कम उर्वरकों और कीटनाशकों का उपयोग करने और पानी का अधिक कुशलता से उपयोग करने की अनुमति देते हैं। हालांकि मुख्य रूप से अमीर देशों में उपयोग किया जाता है, सेंसर और अन्य उपकरण धीरे-धीरे सस्ते हो रहे हैं, जिससे वे विकासशील देशों में अधिक सुलभ हो रहे हैं। + +डिजिटल कृषि द्वारा सक्षम कुछ तकनीकें हैं: + +* तापमान मापन - तापमान मापने से किसानों को पौधों की वृद्धि और परिपक्वता की भविष्यवाणी करने में मदद मिलती है। +* स्वचालित सिंचाई - मिट्टी की नमी को मापना और जब मिट्टी बहुत सूखी हो तो सिंचाई प्रणाली को चालू करना, समयबद्ध सिंचाई के बजाय। समयबद्ध सिंचाई गर्म, शुष्क मौसम के दौरान फसलों को कम पानी देने या बारिश के दौरान अधिक पानी देने का कारण बन सकती है। केवल तभी पानी देकर जब मिट्टी को इसकी आवश्यकता हो, किसान अपने पानी के उपयोग को अनुकूलित कर सकते हैं। +* कीट नियंत्रण - किसान स्वचालित रोबोट या ड्रोन पर कैमरों का उपयोग करके कीटों की जांच कर सकते हैं, फिर केवल आवश्यक स्थानों पर कीटनाशकों का उपयोग कर सकते हैं, जिससे कीटनाशकों के उपयोग और स्थानीय जल आपूर्ति में कीटनाशक के बहाव को कम किया जा सकता है। + +✅ कुछ शोध करें। खेती की उपज बढ़ाने के लिए और कौन-कौन सी तकनीकों का उपयोग किया जाता है? + +> 🎓 'सटीक कृषि' शब्द का उपयोग प्रति-क्षेत्र या यहां तक कि क्षेत्र के हिस्सों के आधार पर फसलों का अवलोकन, मापन और प्रतिक्रिया देने को परिभाषित करने के लिए किया जाता है। इसमें पानी, पोषक तत्व और कीट स्तरों को मापना और सटीक प्रतिक्रिया देना शामिल है, जैसे कि केवल क्षेत्र के एक छोटे हिस्से को पानी देना। + +## खेती में तापमान क्यों महत्वपूर्ण है? + +पौधों के बारे में सीखते समय, अधिकांश छात्रों को पानी, प्रकाश, कार्बन डाइऑक्साइड और पोषक तत्वों की आवश्यकता के बारे में सिखाया जाता है। पौधों को बढ़ने के लिए गर्मी की भी आवश्यकता होती है - यही कारण है कि वसंत में तापमान बढ़ने पर पौधे खिलते हैं, क्यों बर्फ के फूल या डैफोडिल्स एक छोटे गर्म मौसम के कारण जल्दी अंकुरित हो सकते हैं, और क्यों हॉटहाउस और ग्रीनहाउस पौधों को बढ़ने में मदद करते हैं। + +> 🎓 हॉटहाउस और ग्रीनहाउस एक समान काम करते हैं, लेकिन एक महत्वपूर्ण अंतर के साथ। हॉटहाउस कृत्रिम रूप से गर्म किए जाते हैं और किसानों को तापमान को अधिक सटीक रूप से नियंत्रित करने की अनुमति देते हैं, जबकि ग्रीनहाउस सूर्य पर निर्भर करते हैं और आमतौर पर केवल खिड़कियों या अन्य उद्घाटनों के माध्यम से गर्मी को बाहर निकालने का नियंत्रण होता है। + +पौधों का एक आधार या न्यूनतम तापमान, इष्टतम तापमान और अधिकतम तापमान होता है, जो सभी दैनिक औसत तापमान पर आधारित होते हैं। + +* **आधार तापमान** - यह पौधे के बढ़ने के लिए आवश्यक न्यूनतम दैनिक औसत तापमान है। +* **इष्टतम तापमान** - यह सबसे अच्छा दैनिक औसत तापमान है जिससे सबसे अधिक वृद्धि होती है। +* **अधिकतम तापमान** - यह वह अधिकतम तापमान है जिसे पौधा सहन कर सकता है। इसके ऊपर पौधा पानी बचाने और जीवित रहने के प्रयास में अपनी वृद्धि को रोक देगा। + +> 💁 ये औसत तापमान हैं, जो दिन और रात के तापमान का औसत हैं। पौधों को दिन और रात में अलग-अलग तापमान की भी आवश्यकता होती है ताकि वे अधिक कुशलता से प्रकाश संश्लेषण कर सकें और रात में ऊर्जा बचा सकें। + +प्रत्येक पौधे की प्रजाति के लिए उनके आधार, इष्टतम और अधिकतम तापमान के लिए अलग-अलग मान होते हैं। यही कारण है कि कुछ पौधे गर्म देशों में पनपते हैं, और अन्य ठंडे देशों में। + +✅ कुछ शोध करें। अपने बगीचे, स्कूल, या स्थानीय पार्क में किसी भी पौधे के लिए देखें कि क्या आप उनके आधार तापमान का पता लगा सकते हैं। + +![एक ग्राफ जो तापमान बढ़ने पर वृद्धि दर को बढ़ते हुए दिखाता है, फिर तापमान बहुत अधिक होने पर गिरता है](../../../../../translated_images/plant-growth-temp-graph.c6d69c9478e6ca832baa8dcb8d4adcbb67304074ce50e94ac8faae95975177f9.hi.png) + +ऊपर दिया गया ग्राफ तापमान के अनुसार वृद्धि दर का एक उदाहरण दिखाता है। आधार तापमान तक कोई वृद्धि नहीं होती। वृद्धि दर इष्टतम तापमान तक बढ़ती है, फिर इस शिखर तक पहुंचने के बाद गिर जाती है। + +इस ग्राफ का आकार पौधे की प्रजातियों के अनुसार भिन्न होता है। कुछ में इष्टतम के ऊपर तेज गिरावट होती है, कुछ में आधार से इष्टतम तक धीमी वृद्धि होती है। + +> 💁 एक किसान को सबसे अच्छी वृद्धि प्राप्त करने के लिए, उन्हें तीन तापमान मानों को जानने और उनके द्वारा उगाए जा रहे पौधों के लिए ग्राफ के आकार को समझने की आवश्यकता होगी। + +यदि किसान के पास तापमान का नियंत्रण है, उदाहरण के लिए एक व्यावसायिक हॉटहाउस में, तो वे अपने पौधों के लिए इसे अनुकूलित कर सकते हैं। उदाहरण के लिए, टमाटर उगाने वाला एक व्यावसायिक हॉटहाउस दिन के दौरान तापमान को लगभग 25°C और रात में 20°C पर सेट करेगा ताकि सबसे तेज़ वृद्धि हो सके। + +> 🍅 इन तापमानों को कृत्रिम रोशनी, उर्वरकों और नियंत्रित CO +यह कोड CSV फाइल को खोलता है और फिर अंत में एक नई पंक्ति जोड़ता है। इस पंक्ति में वर्तमान तिथि और समय को एक मानव-पढ़ने योग्य प्रारूप में स्वरूपित किया गया है, उसके बाद IoT डिवाइस से प्राप्त तापमान है। डेटा को [ISO 8601 प्रारूप](https://wikipedia.org/wiki/ISO_8601) में टाइमज़ोन के साथ संग्रहीत किया जाता है, लेकिन माइक्रोसेकंड के बिना। + +1. इस कोड को पहले की तरह ही चलाएं, यह सुनिश्चित करते हुए कि आपका IoT डिवाइस डेटा भेज रहा है। एक CSV फाइल जिसका नाम `temperature.csv` है, उसी फोल्डर में बनाई जाएगी। यदि आप इसे देखेंगे, तो आपको तिथि/समय और तापमान माप दिखाई देंगे: + + ```output + date,temperature + 2021-04-19T17:21:36-07:00,25 + 2021-04-19T17:31:36-07:00,24 + 2021-04-19T17:41:36-07:00,25 + ``` + +1. डेटा कैप्चर करने के लिए इस कोड को कुछ समय तक चलाएं। आदर्श रूप से, आपको इसे पूरे दिन चलाना चाहिए ताकि GDD गणना के लिए पर्याप्त डेटा एकत्र किया जा सके। + + +> 💁 यदि आप वर्चुअल IoT डिवाइस का उपयोग कर रहे हैं, तो रैंडम चेकबॉक्स का चयन करें और एक रेंज सेट करें ताकि हर बार तापमान मान लौटने पर एक ही तापमान न मिले। + ![रैंडम चेकबॉक्स का चयन करें और एक रेंज सेट करें](../../../../../translated_images/select-the-random-checkbox-and-set-a-range.32cf4bc7c12e797f8c76616b10c7c23a6592321bb1a6310e0b481e72f97d23b3.hi.png) + + > 💁 यदि आप इसे पूरे दिन चलाना चाहते हैं, तो आपको यह सुनिश्चित करना होगा कि जिस कंप्यूटर पर आपका सर्वर कोड चल रहा है, वह स्लीप मोड में न जाए। इसके लिए आप अपनी पावर सेटिंग्स बदल सकते हैं या [यह सिस्टम को सक्रिय रखने वाला पायथन स्क्रिप्ट](https://github.com/jaqsparow/keep-system-active) चला सकते हैं। + +> 💁 आप इस कोड को [code-server/temperature-sensor-server](../../../../../2-farm/lessons/1-predict-plant-growth/code-server/temperature-sensor-server) फोल्डर में पा सकते हैं। + +### कार्य - संग्रहीत डेटा का उपयोग करके GDD की गणना करें + +एक बार जब सर्वर ने तापमान डेटा कैप्चर कर लिया, तो किसी पौधे के लिए GDD की गणना की जा सकती है। + +इसे मैन्युअल रूप से करने के चरण: + +1. पौधे के लिए बेस तापमान खोजें। उदाहरण के लिए, स्ट्रॉबेरी के लिए बेस तापमान 10°C है। + +1. `temperature.csv` से दिन के लिए सबसे अधिक और सबसे कम तापमान खोजें। + +1. पहले दिए गए GDD फॉर्मूले का उपयोग करके GDD की गणना करें। + +उदाहरण के लिए, यदि दिन का सबसे अधिक तापमान 25°C है और सबसे कम 12°C: + +![GDD = 25 + 12 को 2 से विभाजित करें, फिर परिणाम से 10 घटाएं, जिससे 8.5 प्राप्त होता है](../../../../../translated_images/gdd-calculation-strawberries.59f57db94b22adb8ff6efb951ace33af104a1c6ccca3ffb0f8169c14cb160c90.hi.png) + +* 25 + 12 = 37 +* 37 / 2 = 18.5 +* 18.5 - 10 = 8.5 + +इसलिए, स्ट्रॉबेरी ने **8.5** GDD प्राप्त किए। स्ट्रॉबेरी को फल देने के लिए लगभग 250 GDD की आवश्यकता होती है, इसलिए अभी इसमें समय लगेगा। + +--- + +## 🚀 चुनौती + +पौधों को बढ़ने के लिए केवल गर्मी की आवश्यकता नहीं होती। और किन चीजों की आवश्यकता होती है? + +इनके लिए, पता करें कि क्या इन्हें मापने के लिए सेंसर उपलब्ध हैं। इन स्तरों को नियंत्रित करने के लिए एक्ट्यूएटर्स के बारे में क्या? आप पौधों की वृद्धि को अनुकूलित करने के लिए एक या अधिक IoT डिवाइस कैसे तैयार करेंगे? + +## व्याख्यान के बाद का क्विज़ + +[व्याख्यान के बाद का क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/10) + +## समीक्षा और स्व-अध्ययन + +* [डिजिटल कृषि विकिपीडिया पेज](https://wikipedia.org/wiki/Digital_agriculture) पर डिजिटल कृषि के बारे में और पढ़ें। साथ ही [सटीक कृषि विकिपीडिया पेज](https://wikipedia.org/wiki/Precision_agriculture) पर सटीक कृषि के बारे में और जानें। +* पूर्ण ग्रोइंग डिग्री डेज़ (GDD) की गणना यहां दिए गए सरल फॉर्मूले से अधिक जटिल है। [ग्रोइंग डिग्री डे विकिपीडिया पेज](https://wikipedia.org/wiki/Growing_degree-day) पर अधिक जटिल समीकरण और बेसलाइन से नीचे के तापमान से निपटने के तरीके के बारे में पढ़ें। +* यदि हम खेती के लिए वही पुराने तरीके अपनाते रहे, तो भविष्य में भोजन की कमी हो सकती है। इस [भविष्य के हाई-टेक फार्म्स वीडियो](https://www.youtube.com/watch?v=KIEOuKD9KX8) में हाई-टेक खेती तकनीकों के बारे में जानें। + +## असाइनमेंट + +[Jupyter Notebook का उपयोग करके GDD डेटा को विज़ुअलाइज़ करें](assignment.md) + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/1-predict-plant-growth/assignment.md b/translations/hi/2-farm/lessons/1-predict-plant-growth/assignment.md new file mode 100644 index 00000000..ac26340a --- /dev/null +++ b/translations/hi/2-farm/lessons/1-predict-plant-growth/assignment.md @@ -0,0 +1,55 @@ + +# जुपिटर नोटबुक का उपयोग करके GDD डेटा को विज़ुअलाइज़ करें + +## निर्देश + +इस पाठ में आपने IoT सेंसर का उपयोग करके GDD डेटा एकत्र किया। अच्छा GDD डेटा प्राप्त करने के लिए, आपको कई दिनों तक डेटा एकत्र करना होगा। तापमान डेटा को विज़ुअलाइज़ करने और GDD की गणना करने में मदद के लिए आप [Jupyter Notebooks](https://jupyter.org) जैसे टूल का उपयोग कर सकते हैं। + +कुछ दिनों के लिए डेटा एकत्र करना शुरू करें। आपको यह सुनिश्चित करना होगा कि आपका सर्वर कोड हर समय चल रहा हो जब आपका IoT डिवाइस सक्रिय हो, या तो अपनी पावर प्रबंधन सेटिंग्स को समायोजित करके या [यह सिस्टम को सक्रिय रखने वाला Python स्क्रिप्ट](https://github.com/jaqsparow/keep-system-active) चलाकर। + +एक बार जब आपके पास तापमान डेटा हो, तो आप इस रिपॉजिटरी में मौजूद जुपिटर नोटबुक का उपयोग करके इसे विज़ुअलाइज़ कर सकते हैं और GDD की गणना कर सकते हैं। जुपिटर नोटबुक्स कोड और निर्देशों को *सेल्स* नामक ब्लॉक्स में मिलाते हैं, अक्सर Python में कोड। आप निर्देश पढ़ सकते हैं, फिर प्रत्येक कोड ब्लॉक को एक-एक करके चला सकते हैं। आप कोड को संपादित भी कर सकते हैं। उदाहरण के लिए, इस नोटबुक में आप अपने पौधे के लिए GDD की गणना करने के लिए उपयोग किए जाने वाले बेस तापमान को संपादित कर सकते हैं। + +1. `gdd-calculation` नामक एक फ़ोल्डर बनाएं। + +1. [gdd.ipynb](../../../../../2-farm/lessons/1-predict-plant-growth/code-notebook/gdd.ipynb) फ़ाइल डाउनलोड करें और इसे `gdd-calculation` फ़ोल्डर में कॉपी करें। + +1. MQTT सर्वर द्वारा बनाई गई `temperature.csv` फ़ाइल को कॉपी करें। + +1. `gdd-calculation` फ़ोल्डर में एक नया Python वर्चुअल एनवायरनमेंट बनाएं। + +1. जुपिटर नोटबुक्स के लिए कुछ pip पैकेज इंस्टॉल करें, साथ ही डेटा को प्रबंधित और प्लॉट करने के लिए आवश्यक लाइब्रेरीज़: + + ```sh + pip install --upgrade pip + pip install pandas + pip install matplotlib + pip install jupyter + ``` + +1. जुपिटर में नोटबुक चलाएं: + + ```sh + jupyter notebook gdd.ipynb + ``` + + जुपिटर शुरू होगा और आपके ब्राउज़र में नोटबुक खोल देगा। नोटबुक में दिए गए निर्देशों का पालन करें ताकि मापे गए तापमान को विज़ुअलाइज़ किया जा सके और ग्रोइंग डिग्री डेज़ की गणना की जा सके। + + ![जुपिटर नोटबुक](../../../../../translated_images/gdd-jupyter-notebook.c5b52cf21094f158a61f47f455490fd95f1729777ff90861a4521820bf354cdc.hi.png) + +## मूल्यांकन मानदंड + +| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | +| -------- | --------- | -------- | ----------------- | +| डेटा संग्रह | कम से कम 2 पूरे दिनों का डेटा संग्रह करें | कम से कम 1 पूरे दिन का डेटा संग्रह करें | कुछ डेटा संग्रह करें | +| GDD की गणना | नोटबुक को सफलतापूर्वक चलाएं और GDD की गणना करें | नोटबुक को सफलतापूर्वक चलाएं | नोटबुक चलाने में असमर्थ | + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/1-predict-plant-growth/pi-temp.md b/translations/hi/2-farm/lessons/1-predict-plant-growth/pi-temp.md new file mode 100644 index 00000000..400e0b8f --- /dev/null +++ b/translations/hi/2-farm/lessons/1-predict-plant-growth/pi-temp.md @@ -0,0 +1,123 @@ + +# तापमान मापें - रास्पबेरी पाई + +इस पाठ के इस भाग में, आप अपने रास्पबेरी पाई में एक तापमान सेंसर जोड़ेंगे। + +## हार्डवेयर + +आप जो सेंसर उपयोग करेंगे वह [DHT11 ह्यूमिडिटी और तापमान सेंसर](https://www.seeedstudio.com/Grove-Temperature-Humidity-Sensor-DHT11.html) है, जो एक पैकेज में दो सेंसर को जोड़ता है। यह काफी लोकप्रिय है, और कई व्यावसायिक रूप से उपलब्ध सेंसर तापमान, आर्द्रता और कभी-कभी वायुमंडलीय दबाव को जोड़ते हैं। तापमान सेंसर घटक एक नेगेटिव टेम्परेचर कोएफिशिएंट (NTC) थर्मिस्टर है, एक थर्मिस्टर जिसमें तापमान बढ़ने पर प्रतिरोध कम हो जाता है। + +यह एक डिजिटल सेंसर है, इसलिए इसमें ऑनबोर्ड ADC होता है जो एक डिजिटल सिग्नल बनाता है जिसमें तापमान और आर्द्रता डेटा होता है जिसे माइक्रोकंट्रोलर पढ़ सकता है। + +### तापमान सेंसर को कनेक्ट करें + +Grove तापमान सेंसर को रास्पबेरी पाई से जोड़ा जा सकता है। + +#### कार्य + +तापमान सेंसर को कनेक्ट करें + +![एक Grove तापमान सेंसर](../../../../../translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.hi.png) + +1. Grove केबल के एक सिरे को ह्यूमिडिटी और तापमान सेंसर के सॉकेट में डालें। यह केवल एक ही दिशा में जाएगा। + +1. रास्पबेरी पाई को बंद करके, Grove केबल के दूसरे सिरे को Grove बेस हैट पर **D5** नामक डिजिटल सॉकेट में कनेक्ट करें, जो पाई से जुड़ा है। यह सॉकेट GPIO पिन के पास वाले सॉकेट की पंक्ति में बाईं ओर से दूसरा है। + +![Grove तापमान सेंसर सॉकेट A0 से जुड़ा हुआ](../../../../../translated_images/pi-temperature-sensor.3ff82fff672c8e565ef25a39d26d111de006b825a7e0867227ef4e7fbff8553c.hi.png) + +## तापमान सेंसर को प्रोग्राम करें + +अब डिवाइस को जोड़े गए तापमान सेंसर का उपयोग करने के लिए प्रोग्राम किया जा सकता है। + +### कार्य + +डिवाइस को प्रोग्राम करें। + +1. पाई को चालू करें और इसे बूट होने दें। + +1. VS Code लॉन्च करें, या तो सीधे पाई पर, या Remote SSH एक्सटेंशन के माध्यम से कनेक्ट करें। + + > ⚠️ यदि आवश्यक हो, तो [पाठ 1 में VS Code सेटअप और लॉन्च करने के निर्देशों का संदर्भ लें](../../../1-getting-started/lessons/1-introduction-to-iot/pi.md)। + +1. टर्मिनल से, `pi` उपयोगकर्ता के होम डायरेक्टरी में एक नया फ़ोल्डर बनाएं जिसका नाम `temperature-sensor` हो। इस फ़ोल्डर में `app.py` नामक एक फ़ाइल बनाएं: + + ```sh + mkdir temperature-sensor + cd temperature-sensor + touch app.py + ``` + +1. इस फ़ोल्डर को VS Code में खोलें। + +1. तापमान और आर्द्रता सेंसर का उपयोग करने के लिए, एक अतिरिक्त Pip पैकेज इंस्टॉल करना होगा। VS Code के टर्मिनल से, निम्नलिखित कमांड चलाएं ताकि यह Pip पैकेज पाई पर इंस्टॉल हो जाए: + + ```sh + pip3 install seeed-python-dht + ``` + +1. `app.py` फ़ाइल में निम्नलिखित कोड जोड़ें ताकि आवश्यक लाइब्रेरी को इम्पोर्ट किया जा सके: + + ```python + import time + from seeed_dht import DHT + ``` + + `from seeed_dht import DHT` स्टेटमेंट `seeed_dht` मॉड्यूल से Grove तापमान सेंसर के साथ इंटरैक्ट करने के लिए `DHT` सेंसर क्लास को इम्पोर्ट करता है। + +1. ऊपर दिए गए कोड के बाद निम्नलिखित कोड जोड़ें ताकि तापमान सेंसर को मैनेज करने वाले क्लास का एक इंस्टेंस बनाया जा सके: + + ```python + sensor = DHT("11", 5) + ``` + + यह `DHT` क्लास का एक इंस्टेंस घोषित करता है जो **D**igital **H**umidity और **T**emperature सेंसर को मैनेज करता है। पहला पैरामीटर कोड को बताता है कि उपयोग किया जा रहा सेंसर *DHT11* सेंसर है - आप जिस लाइब्रेरी का उपयोग कर रहे हैं वह इस सेंसर के अन्य वेरिएंट को भी सपोर्ट करती है। दूसरा पैरामीटर कोड को बताता है कि सेंसर Grove बेस हैट पर डिजिटल पोर्ट `D5` से जुड़ा है। + + > ✅ याद रखें, सभी सॉकेट्स के पास यूनिक पिन नंबर होते हैं। पिन 0, 2, 4, और 6 एनालॉग पिन हैं, पिन 5, 16, 18, 22, 24, और 26 डिजिटल पिन हैं। + +1. ऊपर दिए गए कोड के बाद एक अनंत लूप जोड़ें ताकि तापमान सेंसर का मान प्राप्त किया जा सके और इसे कंसोल पर प्रिंट किया जा सके: + + ```python + while True: + _, temp = sensor.read() + print(f'Temperature {temp}°C') + ``` + + `sensor.read()` को कॉल करने पर आर्द्रता और तापमान का एक ट्यूपल रिटर्न होता है। आपको केवल तापमान मान की आवश्यकता है, इसलिए आर्द्रता को अनदेखा किया जाता है। फिर तापमान मान को कंसोल पर प्रिंट किया जाता है। + +1. लूप के अंत में दस सेकंड का एक छोटा सा स्लीप जोड़ें क्योंकि तापमान स्तर को लगातार जांचने की आवश्यकता नहीं है। स्लीप डिवाइस की पावर खपत को कम करता है। + + ```python + time.sleep(10) + ``` + +1. VS Code टर्मिनल से, निम्नलिखित कमांड चलाएं ताकि आपका Python ऐप चल सके: + + ```sh + python3 app.py + ``` + + आपको कंसोल पर तापमान मान दिखाई देने चाहिए। सेंसर को गर्म करने के लिए कुछ उपयोग करें, जैसे कि इसे अपने अंगूठे से दबाना, या पंखे का उपयोग करना ताकि मान बदलते हुए दिखाई दें: + + ```output + pi@raspberrypi:~/temperature-sensor $ python3 app.py + Temperature 26°C + Temperature 26°C + Temperature 28°C + Temperature 30°C + Temperature 32°C + ``` + +> 💁 आप इस कोड को [code-temperature/pi](../../../../../2-farm/lessons/1-predict-plant-growth/code-temperature/pi) फ़ोल्डर में पा सकते हैं। + +😀 आपका तापमान सेंसर प्रोग्राम सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/1-predict-plant-growth/single-board-computer-temp-publish.md b/translations/hi/2-farm/lessons/1-predict-plant-growth/single-board-computer-temp-publish.md new file mode 100644 index 00000000..1ed6349e --- /dev/null +++ b/translations/hi/2-farm/lessons/1-predict-plant-growth/single-board-computer-temp-publish.md @@ -0,0 +1,69 @@ + +# तापमान प्रकाशित करें - वर्चुअल IoT हार्डवेयर और रास्पबेरी पाई + +इस पाठ के इस भाग में, आप रास्पबेरी पाई या वर्चुअल IoT डिवाइस द्वारा पता लगाए गए तापमान मानों को MQTT के माध्यम से प्रकाशित करेंगे ताकि उनका उपयोग बाद में GDD की गणना के लिए किया जा सके। + +## तापमान प्रकाशित करें + +एक बार तापमान पढ़ लिया जाए, तो इसे MQTT के माध्यम से 'सर्वर' कोड पर प्रकाशित किया जा सकता है, जो इन मानों को पढ़ेगा और GDD गणना के लिए संग्रहीत करेगा। + +### कार्य - तापमान प्रकाशित करें + +डिवाइस को तापमान डेटा प्रकाशित करने के लिए प्रोग्राम करें। + +1. यदि `temperature-sensor` ऐप प्रोजेक्ट पहले से खुला नहीं है, तो इसे खोलें। + +1. MQTT से कनेक्ट करने और टेलीमेट्री भेजने के लिए आपने पाठ 4 में जो कदम उठाए थे, उन्हें दोहराएं। आप वही सार्वजनिक Mosquitto ब्रॉकर का उपयोग करेंगे। + + इसके लिए कदम हैं: + + - MQTT पिप पैकेज जोड़ें + - MQTT ब्रॉकर से कनेक्ट करने के लिए कोड जोड़ें + - टेलीमेट्री प्रकाशित करने के लिए कोड जोड़ें + + > ⚠️ यदि आवश्यक हो, तो [MQTT से कनेक्ट करने के निर्देश](../../../1-getting-started/lessons/4-connect-internet/single-board-computer-mqtt.md) और [टेलीमेट्री भेजने के निर्देश](../../../1-getting-started/lessons/4-connect-internet/single-board-computer-telemetry.md) को पाठ 4 से देखें। + +1. सुनिश्चित करें कि `client_name` इस प्रोजेक्ट के नाम को दर्शाता है: + + ```python + client_name = id + 'temperature_sensor_client' + ``` + +1. टेलीमेट्री के लिए, लाइट मान भेजने के बजाय, DHT सेंसर से पढ़े गए तापमान मान को JSON दस्तावेज़ में `temperature` नामक एक प्रॉपर्टी में भेजें: + + ```python + _, temp = sensor.read() + telemetry = json.dumps({'temperature' : temp}) + ``` + +1. तापमान मान को बार-बार पढ़ने की आवश्यकता नहीं है - यह कम समय में ज्यादा नहीं बदलेगा, इसलिए `time.sleep` को 10 मिनट पर सेट करें: + + ```cpp + time.sleep(10 * 60); + ``` + + > 💁 `sleep` फ़ंक्शन समय को सेकंड में लेता है, इसलिए इसे पढ़ने में आसान बनाने के लिए मान को एक गणना के परिणाम के रूप में पास किया जाता है। 1 मिनट में 60 सेकंड होते हैं, इसलिए 10 x (1 मिनट में 60 सेकंड) 10 मिनट की देरी देता है। + +1. कोड को उसी तरह चलाएं जैसे आपने असाइनमेंट के पिछले भाग से कोड चलाया था। यदि आप वर्चुअल IoT डिवाइस का उपयोग कर रहे हैं, तो सुनिश्चित करें कि CounterFit ऐप चल रहा है और आर्द्रता और तापमान सेंसर सही पिन पर बनाए गए हैं। + + ```output + pi@raspberrypi:~/temperature-sensor $ python3 app.py + MQTT connected! + Sending telemetry {"temperature": 25} + Sending telemetry {"temperature": 25} + ``` + +> 💁 आप इस कोड को [code-publish-temperature/virtual-device](../../../../../2-farm/lessons/1-predict-plant-growth/code-publish-temperature/virtual-device) फोल्डर या [code-publish-temperature/pi](../../../../../2-farm/lessons/1-predict-plant-growth/code-publish-temperature/pi) फोल्डर में पा सकते हैं। + +😀 आपने सफलतापूर्वक अपने डिवाइस से टेलीमेट्री के रूप में तापमान प्रकाशित कर दिया है। + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/1-predict-plant-growth/virtual-device-temp.md b/translations/hi/2-farm/lessons/1-predict-plant-growth/virtual-device-temp.md new file mode 100644 index 00000000..680c95be --- /dev/null +++ b/translations/hi/2-farm/lessons/1-predict-plant-growth/virtual-device-temp.md @@ -0,0 +1,152 @@ + +# तापमान मापें - वर्चुअल IoT हार्डवेयर + +इस पाठ के इस भाग में, आप अपने वर्चुअल IoT डिवाइस में एक तापमान सेंसर जोड़ेंगे। + +## वर्चुअल हार्डवेयर + +वर्चुअल IoT डिवाइस एक सिम्युलेटेड Grove Digital Humidity और Temperature सेंसर का उपयोग करेगा। यह प्रयोगशाला को उसी तरह बनाए रखता है जैसे कि एक Raspberry Pi के साथ भौतिक Grove DHT11 सेंसर का उपयोग किया जा रहा हो। + +यह सेंसर **तापमान सेंसर** और **आर्द्रता सेंसर** को जोड़ता है, लेकिन इस प्रयोगशाला में आप केवल तापमान सेंसर घटक में रुचि रखते हैं। एक भौतिक IoT डिवाइस में, तापमान सेंसर एक [थर्मिस्टर](https://wikipedia.org/wiki/Thermistor) होगा, जो तापमान में परिवर्तन के साथ प्रतिरोध में बदलाव को मापकर तापमान मापता है। तापमान सेंसर आमतौर पर डिजिटल सेंसर होते हैं, जो आंतरिक रूप से मापे गए प्रतिरोध को डिग्री सेल्सियस (या केल्विन, या फ़ारेनहाइट) में तापमान में परिवर्तित करते हैं। + +### सेंसर को CounterFit में जोड़ें + +वर्चुअल आर्द्रता और तापमान सेंसर का उपयोग करने के लिए, आपको CounterFit ऐप में इन दोनों सेंसर को जोड़ने की आवश्यकता है। + +#### कार्य - सेंसर को CounterFit में जोड़ें + +CounterFit ऐप में आर्द्रता और तापमान सेंसर जोड़ें। + +1. अपने कंप्यूटर पर `temperature-sensor` नामक एक फ़ोल्डर में एक नया Python ऐप बनाएं, जिसमें `app.py` नामक एक फ़ाइल हो और एक Python वर्चुअल वातावरण हो, और CounterFit pip पैकेज जोड़ें। + + > ⚠️ यदि आवश्यक हो, तो [पाठ 1 में CounterFit Python प्रोजेक्ट बनाने और सेटअप करने के निर्देशों](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md) का संदर्भ लें। + +1. DHT11 सेंसर के लिए CounterFit शिम स्थापित करने के लिए एक अतिरिक्त Pip पैकेज इंस्टॉल करें। सुनिश्चित करें कि आप इसे वर्चुअल वातावरण सक्रिय होने के साथ टर्मिनल से इंस्टॉल कर रहे हैं। + + ```sh + pip install counterfit-shims-seeed-python-dht + ``` + +1. सुनिश्चित करें कि CounterFit वेब ऐप चल रहा है। + +1. एक आर्द्रता सेंसर बनाएं: + + 1. *Sensors* पैन में *Create sensor* बॉक्स में, *Sensor type* ड्रॉपडाउन से *Humidity* चुनें। + + 1. *Units* को *Percentage* पर सेट रहने दें। + + 1. सुनिश्चित करें कि *Pin* को *5* पर सेट किया गया है। + + 1. **Add** बटन का चयन करें ताकि पिन 5 पर आर्द्रता सेंसर बनाया जा सके। + + ![आर्द्रता सेंसर सेटिंग्स](../../../../../translated_images/counterfit-create-humidity-sensor.2750e27b6f30e09cf4e22101defd5252710717620816ab41ba688f91f757c49a.hi.png) + + आर्द्रता सेंसर बनाया जाएगा और सेंसर सूची में दिखाई देगा। + + ![आर्द्रता सेंसर बनाया गया](../../../../../translated_images/counterfit-humidity-sensor.7b12f7f339e430cb26c8211d2dba4ef75261b353a01da0932698b5bebd693f27.hi.png) + +1. एक तापमान सेंसर बनाएं: + + 1. *Sensors* पैन में *Create sensor* बॉक्स में, *Sensor type* ड्रॉपडाउन से *Temperature* चुनें। + + 1. *Units* को *Celsius* पर सेट रहने दें। + + 1. सुनिश्चित करें कि *Pin* को *6* पर सेट किया गया है। + + 1. **Add** बटन का चयन करें ताकि पिन 6 पर तापमान सेंसर बनाया जा सके। + + ![तापमान सेंसर सेटिंग्स](../../../../../translated_images/counterfit-create-temperature-sensor.199350ed34f7343d79dccbe95eaf6c11d2121f03d1c35ab9613b330c23f39b29.hi.png) + + तापमान सेंसर बनाया जाएगा और सेंसर सूची में दिखाई देगा। + + ![तापमान सेंसर बनाया गया](../../../../../translated_images/counterfit-temperature-sensor.f0560236c96a9016bafce7f6f792476fe3367bc6941a1f7d5811d144d4bcbfff.hi.png) + +## तापमान सेंसर ऐप प्रोग्राम करें + +अब CounterFit सेंसर का उपयोग करके तापमान सेंसर ऐप प्रोग्राम किया जा सकता है। + +### कार्य - तापमान सेंसर ऐप प्रोग्राम करें + +तापमान सेंसर ऐप प्रोग्राम करें। + +1. सुनिश्चित करें कि `temperature-sensor` ऐप VS Code में खुला है। + +1. `app.py` फ़ाइल खोलें। + +1. CounterFit से ऐप को कनेक्ट करने के लिए `app.py` के शीर्ष पर निम्न कोड जोड़ें: + + ```python + from counterfit_connection import CounterFitConnection + CounterFitConnection.init('127.0.0.1', 5000) + ``` + +1. आवश्यक लाइब्रेरी आयात करने के लिए `app.py` फ़ाइल में निम्न कोड जोड़ें: + + ```python + import time + from counterfit_shims_seeed_python_dht import DHT + ``` + + `from seeed_dht import DHT` कथन `DHT` सेंसर क्लास को आयात करता है ताकि `counterfit_shims_seeed_python_dht` मॉड्यूल से शिम का उपयोग करके वर्चुअल Grove तापमान सेंसर के साथ इंटरैक्ट किया जा सके। + +1. वर्चुअल आर्द्रता और तापमान सेंसर को प्रबंधित करने वाले क्लास का एक उदाहरण बनाने के लिए उपरोक्त कोड के बाद निम्न कोड जोड़ें: + + ```python + sensor = DHT("11", 5) + ``` + + यह `DHT` क्लास का एक उदाहरण घोषित करता है, जो वर्चुअल **D**igital **H**umidity और **T**emperature सेंसर को प्रबंधित करता है। पहला पैरामीटर कोड को बताता है कि उपयोग किया जा रहा सेंसर एक वर्चुअल *DHT11* सेंसर है। दूसरा पैरामीटर कोड को बताता है कि सेंसर पोर्ट `5` से जुड़ा है। + + > 💁 CounterFit इस संयुक्त आर्द्रता और तापमान सेंसर को दो सेंसर से कनेक्ट करके सिम्युलेट करता है, एक आर्द्रता सेंसर उस पिन पर जहां `DHT` क्लास बनाया गया है, और एक तापमान सेंसर जो अगले पिन पर चलता है। यदि आर्द्रता सेंसर पिन 5 पर है, तो शिम तापमान सेंसर को पिन 6 पर मानता है। + +1. उपरोक्त कोड के बाद एक अनंत लूप जोड़ें ताकि तापमान सेंसर का मान प्राप्त किया जा सके और इसे कंसोल में प्रिंट किया जा सके: + + ```python + while True: + _, temp = sensor.read() + print(f'Temperature {temp}°C') + ``` + + `sensor.read()` को कॉल करने पर आर्द्रता और तापमान का एक ट्यूपल लौटता है। आपको केवल तापमान मान की आवश्यकता है, इसलिए आर्द्रता को अनदेखा कर दिया जाता है। फिर तापमान मान को कंसोल में प्रिंट किया जाता है। + +1. `लूप` के अंत में दस सेकंड की एक छोटी नींद जोड़ें क्योंकि तापमान स्तरों को लगातार जांचने की आवश्यकता नहीं है। नींद डिवाइस की पावर खपत को कम करती है। + + ```python + time.sleep(10) + ``` + +1. VS Code टर्मिनल से, जिसमें वर्चुअल वातावरण सक्रिय है, निम्नलिखित चलाएं ताकि आपका Python ऐप चल सके: + + ```sh + python app.py + ``` + +1. CounterFit ऐप से, तापमान सेंसर के मान को बदलें जिसे ऐप द्वारा पढ़ा जाएगा। आप इसे दो तरीकों में से एक में कर सकते हैं: + + * तापमान सेंसर के लिए *Value* बॉक्स में एक संख्या दर्ज करें, फिर **Set** बटन का चयन करें। जो संख्या आप दर्ज करते हैं, वह सेंसर द्वारा लौटाया गया मान होगा। + + * *Random* चेकबॉक्स को चेक करें, और *Min* और *Max* मान दर्ज करें, फिर **Set** बटन का चयन करें। हर बार जब सेंसर एक मान पढ़ता है, तो यह *Min* और *Max* के बीच एक यादृच्छिक संख्या पढ़ेगा। + + आप कंसोल में आपके द्वारा सेट किए गए मानों को देखेंगे। *Value* या *Random* सेटिंग्स बदलें ताकि मान बदलते हुए देखें। + + ```output + (.venv) ➜ temperature-sensor python app.py + Temperature 28.25°C + Temperature 30.71°C + Temperature 25.17°C + ``` + +> 💁 आप इस कोड को [code-temperature/virtual-device](../../../../../2-farm/lessons/1-predict-plant-growth/code-temperature/virtual-device) फ़ोल्डर में पा सकते हैं। + +😀 आपका तापमान सेंसर प्रोग्राम सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp-publish.md b/translations/hi/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp-publish.md new file mode 100644 index 00000000..311bb39b --- /dev/null +++ b/translations/hi/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp-publish.md @@ -0,0 +1,80 @@ + +# तापमान प्रकाशित करें - Wio Terminal + +इस पाठ के इस भाग में, आप Wio Terminal द्वारा पता किए गए तापमान मानों को MQTT के माध्यम से प्रकाशित करेंगे ताकि उनका उपयोग बाद में GDD की गणना के लिए किया जा सके। + +## तापमान प्रकाशित करें + +एक बार तापमान पढ़ लिया जाए, इसे MQTT के माध्यम से 'सर्वर' कोड पर प्रकाशित किया जा सकता है, जो इन मानों को पढ़ेगा और उन्हें GDD गणना के लिए तैयार रखेगा। माइक्रोकंट्रोलर इंटरनेट से समय नहीं पढ़ते और बॉक्स से बाहर रियल-टाइम क्लॉक के साथ समय को ट्रैक नहीं करते हैं। डिवाइस को ऐसा करने के लिए प्रोग्राम करना पड़ता है, यह मानते हुए कि इसमें आवश्यक हार्डवेयर है। + +इस पाठ को सरल बनाने के लिए, समय को सेंसर डेटा के साथ नहीं भेजा जाएगा। इसके बजाय, जब सर्वर कोड संदेश प्राप्त करेगा, तो वह समय जोड़ सकता है। + +### कार्य + +डिवाइस को तापमान डेटा प्रकाशित करने के लिए प्रोग्राम करें। + +1. `temperature-sensor` Wio Terminal प्रोजेक्ट खोलें। + +1. MQTT से कनेक्ट करने और टेलीमेट्री भेजने के लिए आपने पाठ 4 में जो कदम उठाए थे, उन्हें दोहराएं। आप वही सार्वजनिक Mosquitto ब्रॉकर का उपयोग करेंगे। + + इसके लिए कदम हैं: + + - `.ini` फ़ाइल में Seeed WiFi और MQTT लाइब्रेरी जोड़ें। + - WiFi से कनेक्ट करने के लिए कॉन्फ़िगरेशन फ़ाइल और कोड जोड़ें। + - MQTT ब्रॉकर से कनेक्ट करने के लिए कोड जोड़ें। + - टेलीमेट्री प्रकाशित करने के लिए कोड जोड़ें। + + > ⚠️ यदि आवश्यक हो, तो [MQTT से कनेक्ट करने के निर्देश](../../../1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md) और [टेलीमेट्री भेजने के निर्देश](../../../1-getting-started/lessons/4-connect-internet/wio-terminal-telemetry.md) पाठ 4 से देखें। + +1. सुनिश्चित करें कि `config.h` हेडर फ़ाइल में `CLIENT_NAME` इस प्रोजेक्ट को दर्शाता है: + + ```cpp + const string CLIENT_NAME = ID + "temperature_sensor_client"; + ``` + +1. टेलीमेट्री के लिए, लाइट मान भेजने के बजाय, DHT सेंसर से पढ़े गए तापमान मान को JSON दस्तावेज़ में `temperature` नामक एक प्रॉपर्टी में भेजें। इसके लिए `main.cpp` में `loop` फ़ंक्शन बदलें: + + ```cpp + float temp_hum_val[2] = {0}; + dht.readTempAndHumidity(temp_hum_val); + + DynamicJsonDocument doc(1024); + doc["temperature"] = temp_hum_val[1]; + ``` + +1. तापमान मान को बार-बार पढ़ने की आवश्यकता नहीं है - यह थोड़े समय में ज्यादा नहीं बदलेगा। इसलिए `loop` फ़ंक्शन में `delay` को 10 मिनट पर सेट करें: + + ```cpp + delay(10 * 60 * 1000); + ``` + + > 💁 `delay` फ़ंक्शन समय को मिलीसेकंड में लेता है, इसलिए इसे पढ़ने में आसान बनाने के लिए मान को एक गणना के परिणाम के रूप में पास किया गया है। 1,000ms एक सेकंड में, 60s एक मिनट में, तो 10 x (60s एक मिनट में) x (1000ms एक सेकंड में) 10 मिनट की देरी देता है। + +1. इसे अपने Wio Terminal पर अपलोड करें और सीरियल मॉनिटर का उपयोग करके देखें कि तापमान MQTT ब्रॉकर को भेजा जा रहा है। + + ```output + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem1201 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + Connecting to WiFi.. + Connected! + Attempting MQTT connection...connected + Sending telemetry {"temperature":25} + Sending telemetry {"temperature":25} + ``` + +> 💁 आप इस कोड को [code-publish-temperature/wio-terminal](../../../../../2-farm/lessons/1-predict-plant-growth/code-publish-temperature/wio-terminal) फ़ोल्डर में पा सकते हैं। + +😀 आपने सफलतापूर्वक अपने डिवाइस से टेलीमेट्री के रूप में तापमान प्रकाशित कर दिया है। + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp.md b/translations/hi/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp.md new file mode 100644 index 00000000..d2c7e328 --- /dev/null +++ b/translations/hi/2-farm/lessons/1-predict-plant-growth/wio-terminal-temp.md @@ -0,0 +1,141 @@ + +# तापमान मापें - Wio Terminal + +इस पाठ के इस भाग में, आप अपने Wio Terminal में एक तापमान सेंसर जोड़ेंगे और उससे तापमान के मान पढ़ेंगे। + +## हार्डवेयर + +Wio Terminal को एक तापमान सेंसर की आवश्यकता है। + +आप जो सेंसर उपयोग करेंगे वह [DHT11 ह्यूमिडिटी और तापमान सेंसर](https://www.seeedstudio.com/Grove-Temperature-Humidity-Sensor-DHT11.html) है, जो एक पैकेज में 2 सेंसर को जोड़ता है। यह काफी लोकप्रिय है, और कई व्यावसायिक रूप से उपलब्ध सेंसर तापमान, आर्द्रता और कभी-कभी वायुमंडलीय दबाव को जोड़ते हैं। तापमान सेंसर घटक एक नेगेटिव टेम्परेचर कोएफिशिएंट (NTC) थर्मिस्टर है, एक ऐसा थर्मिस्टर जिसमें तापमान बढ़ने पर प्रतिरोध घटता है। + +यह एक डिजिटल सेंसर है, इसलिए इसमें एक ऑनबोर्ड ADC है जो एक डिजिटल सिग्नल बनाता है जिसमें तापमान और आर्द्रता डेटा होता है जिसे माइक्रोकंट्रोलर पढ़ सकता है। + +### तापमान सेंसर को कनेक्ट करें + +Grove तापमान सेंसर को Wio Terminal के डिजिटल पोर्ट से जोड़ा जा सकता है। + +#### कार्य - तापमान सेंसर को कनेक्ट करें + +तापमान सेंसर को कनेक्ट करें। + +![एक Grove तापमान सेंसर](../../../../../translated_images/grove-dht11.07f8eafceee170043efbb53e1d15722bd4e00fbaa9ff74290b57e9f66eb82c17.hi.png) + +1. Grove केबल के एक सिरे को ह्यूमिडिटी और तापमान सेंसर के सॉकेट में डालें। यह केवल एक ही दिशा में जाएगा। + +1. Wio Terminal को अपने कंप्यूटर या अन्य पावर सप्लाई से डिस्कनेक्ट करें, और Grove केबल के दूसरे सिरे को Wio Terminal के स्क्रीन की ओर देखते हुए दाईं ओर के Grove सॉकेट में कनेक्ट करें। यह सॉकेट पावर बटन से सबसे दूर है। + +![Grove तापमान सेंसर को दाईं ओर के सॉकेट से जोड़ा गया है](../../../../../translated_images/wio-temperature-sensor.2934928f38c7f79a68d24879d2c8986c78244696f931e2e33c293f426ecdc0ad.hi.png) + +## तापमान सेंसर को प्रोग्राम करें + +अब Wio Terminal को जोड़े गए तापमान सेंसर का उपयोग करने के लिए प्रोग्राम किया जा सकता है। + +### कार्य - तापमान सेंसर को प्रोग्राम करें + +डिवाइस को प्रोग्राम करें। + +1. PlatformIO का उपयोग करके एक नया Wio Terminal प्रोजेक्ट बनाएं। इस प्रोजेक्ट का नाम `temperature-sensor` रखें। `setup` फंक्शन में सीरियल पोर्ट को कॉन्फ़िगर करने के लिए कोड जोड़ें। + + > ⚠️ यदि आवश्यक हो, तो [प्रोजेक्ट 1, पाठ 1 में PlatformIO प्रोजेक्ट बनाने के निर्देश देखें](../../../1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md#create-a-platformio-project)। + +1. प्रोजेक्ट के `platformio.ini` फाइल में Seeed Grove Humidity और Temperature सेंसर लाइब्रेरी के लिए एक लाइब्रेरी डिपेंडेंसी जोड़ें: + + ```ini + lib_deps = + seeed-studio/Grove Temperature And Humidity Sensor @ 1.0.1 + ``` + + > ⚠️ यदि आवश्यक हो, तो [प्रोजेक्ट 1, पाठ 4 में PlatformIO प्रोजेक्ट में लाइब्रेरी जोड़ने के निर्देश देखें](../../../1-getting-started/lessons/4-connect-internet/wio-terminal-mqtt.md#install-the-wifi-and-mqtt-arduino-libraries)। + +1. फाइल के शीर्ष पर, मौजूदा `#include ` के नीचे निम्नलिखित `#include` निर्देश जोड़ें: + + ```cpp + #include + #include + ``` + + यह सेंसर के साथ इंटरैक्ट करने के लिए आवश्यक फाइलें आयात करता है। `DHT.h` हेडर फाइल सेंसर के लिए कोड को शामिल करती है, और `SPI.h` हेडर जोड़ने से यह सुनिश्चित होता है कि सेंसर से बात करने के लिए आवश्यक कोड ऐप को संकलित करते समय लिंक हो। + +1. `setup` फंक्शन से पहले, DHT सेंसर को डिक्लेयर करें: + + ```cpp + DHT dht(D0, DHT11); + ``` + + यह `DHT` क्लास का एक इंस्टेंस डिक्लेयर करता है जो **D**igital **H**umidity और **T**emperature सेंसर को मैनेज करता है। यह `D0` पोर्ट से जुड़ा है, जो Wio Terminal पर दाईं ओर का Grove सॉकेट है। दूसरा पैरामीटर कोड को बताता है कि उपयोग किया जा रहा सेंसर *DHT11* सेंसर है - आप जो लाइब्रेरी उपयोग कर रहे हैं वह इस सेंसर के अन्य वेरिएंट को भी सपोर्ट करती है। + +1. `setup` फंक्शन में, सीरियल कनेक्शन सेट करने के लिए कोड जोड़ें: + + ```cpp + void setup() + { + Serial.begin(9600); + + while (!Serial) + ; // Wait for Serial to be ready + + delay(1000); + } + ``` + +1. `setup` फंक्शन के अंत में, अंतिम `delay` के बाद, DHT सेंसर को शुरू करने के लिए एक कॉल जोड़ें: + + ```cpp + dht.begin(); + ``` + +1. `loop` फंक्शन में, सेंसर को कॉल करने और सीरियल पोर्ट पर तापमान प्रिंट करने के लिए कोड जोड़ें: + + ```cpp + void loop() + { + float temp_hum_val[2] = {0}; + dht.readTempAndHumidity(temp_hum_val); + Serial.print("Temperature: "); + Serial.print(temp_hum_val[1]); + Serial.println ("°C"); + + delay(10000); + } + ``` + + यह कोड 2 फ्लोट्स का एक खाली ऐरे डिक्लेयर करता है, और इसे `DHT` इंस्टेंस पर `readTempAndHumidity` कॉल में पास करता है। यह कॉल ऐरे को 2 मानों से भरता है - आर्द्रता ऐरे के 0वें आइटम में जाती है (याद रखें कि C++ में ऐरे 0-आधारित होते हैं, इसलिए 0वां आइटम ऐरे का 'पहला' आइटम होता है), और तापमान 1वें आइटम में जाता है। + + तापमान को ऐरे के 1वें आइटम से पढ़ा जाता है और सीरियल पोर्ट पर प्रिंट किया जाता है। + + > 🇺🇸 तापमान को सेल्सियस में पढ़ा जाता है। अमेरिकियों के लिए, इसे फ़ारेनहाइट में बदलने के लिए, पढ़े गए सेल्सियस मान को 5 से विभाजित करें, फिर 9 से गुणा करें, फिर 32 जोड़ें। उदाहरण के लिए, 20°C का तापमान ((20/5)*9) + 32 = 68°F बन जाता है। + +1. कोड को Wio Terminal पर बिल्ड और अपलोड करें। + + > ⚠️ यदि आवश्यक हो, तो [प्रोजेक्ट 1, पाठ 1 में PlatformIO प्रोजेक्ट बनाने के निर्देश देखें](../../../1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md#write-the-hello-world-app)। + +1. अपलोड हो जाने के बाद, आप सीरियल मॉनिटर का उपयोग करके तापमान की निगरानी कर सकते हैं: + + ```output + > Executing task: platformio device monitor < + + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem1201 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + Temperature: 25.00°C + Temperature: 25.00°C + Temperature: 25.00°C + Temperature: 24.00°C + ``` + +> 💁 आप इस कोड को [code-temperature/wio-terminal](../../../../../2-farm/lessons/1-predict-plant-growth/code-temperature/wio-terminal) फोल्डर में पा सकते हैं। + +😀 आपका तापमान सेंसर प्रोग्राम सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल दस्तावेज़, जो इसकी मूल भाषा में है, को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/2-detect-soil-moisture/README.md b/translations/hi/2-farm/lessons/2-detect-soil-moisture/README.md new file mode 100644 index 00000000..ff294c7f --- /dev/null +++ b/translations/hi/2-farm/lessons/2-detect-soil-moisture/README.md @@ -0,0 +1,167 @@ + +C, जिसे *आई-स्क्वेयर्ड-सी* के रूप में उच्चारित किया जाता है, एक मल्टी-कंट्रोलर, मल्टी-पेरिफेरल प्रोटोकॉल है, जिसमें कोई भी कनेक्टेड डिवाइस कंट्रोलर या पेरिफेरल के रूप में कार्य कर सकता है और I²C बस (डेटा ट्रांसफर करने वाली संचार प्रणाली) के माध्यम से संवाद कर सकता है। डेटा को एड्रेस्ड पैकेट्स के रूप में भेजा जाता है, जिसमें प्रत्येक पैकेट में उस कनेक्टेड डिवाइस का पता होता है जिसके लिए यह भेजा गया है। + +> 💁 इस मॉडल को पहले मास्टर/स्लेव कहा जाता था, लेकिन इस शब्दावली को अब इसके गुलामी से जुड़े संदर्भों के कारण छोड़ दिया गया है। [ओपन सोर्स हार्डवेयर एसोसिएशन ने कंट्रोलर/पेरिफेरल को अपनाया है](https://www.oshwa.org/a-resolution-to-redefine-spi-signal-names/), लेकिन आप अभी भी पुराने शब्दावली के संदर्भ देख सकते हैं। + +डिवाइस का एक पता होता है जिसका उपयोग वे I²C बस से कनेक्ट होने पर करते हैं, और यह आमतौर पर डिवाइस पर हार्ड कोडेड होता है। उदाहरण के लिए, Seeed के प्रत्येक प्रकार के Grove सेंसर का एक ही पता होता है, जैसे सभी लाइट सेंसर का एक ही पता होता है, सभी बटन का पता लाइट सेंसर के पते से अलग होता है। कुछ डिवाइस में पते को बदलने के तरीके होते हैं, जैसे जंपर सेटिंग्स बदलकर या पिन्स को सोल्डर करके। + +I²C में 2 मुख्य तारों के साथ 2 पावर तार होते हैं: + +| तार | नाम | विवरण | +| ---- | --------- | ----------- | +| SDA | सीरियल डेटा | यह तार डिवाइसों के बीच डेटा भेजने के लिए है। | +| SCL | सीरियल क्लॉक | यह तार कंट्रोलर द्वारा सेट की गई दर पर एक क्लॉक सिग्नल भेजता है। | +| VCC | वोल्टेज कॉमन कलेक्टर | डिवाइसों के लिए पावर सप्लाई। यह तार SDA और SCL तारों से जुड़ा होता है और एक पुल-अप रेसिस्टर के माध्यम से उनकी पावर प्रदान करता है, जो सिग्नल को तब बंद कर देता है जब कोई डिवाइस कंट्रोलर न हो। | +| GND | ग्राउंड | यह इलेक्ट्रिकल सर्किट के लिए एक सामान्य ग्राउंड प्रदान करता है। | + +![I2C बस जिसमें 3 डिवाइस SDA और SCL तारों से जुड़े हुए हैं, और एक सामान्य ग्राउंड तार साझा कर रहे हैं](../../../../../translated_images/i2c.83da845dde02256bdd462dbe0d5145461416b74930571b89d1ae142841eeb584.hi.png) + +डेटा भेजने के लिए, एक डिवाइस एक स्टार्ट कंडीशन जारी करेगा ताकि यह दिखा सके कि वह डेटा भेजने के लिए तैयार है। इसके बाद वह कंट्रोलर बन जाएगा। कंट्रोलर फिर उस डिवाइस का पता भेजता है जिससे वह संवाद करना चाहता है, साथ ही यह भी बताता है कि वह डेटा पढ़ना चाहता है या लिखना। डेटा ट्रांसमिट होने के बाद, कंट्रोलर एक स्टॉप कंडीशन भेजता है ताकि यह संकेत दे सके कि उसने काम पूरा कर लिया है। इसके बाद कोई अन्य डिवाइस कंट्रोलर बन सकता है और डेटा भेज या प्राप्त कर सकता है। + +I2C की गति सीमाएँ होती हैं, जिसमें 3 अलग-अलग मोड्स निश्चित गति पर चलते हैं। सबसे तेज़ High Speed मोड है, जिसकी अधिकतम गति 3.4Mbps (मेगाबिट्स प्रति सेकंड) है, हालांकि बहुत कम डिवाइस इस गति का समर्थन करते हैं। उदाहरण के लिए, Raspberry Pi केवल fast मोड पर 400Kbps (किलोबिट्स प्रति सेकंड) तक सीमित है। Standard मोड 100Kbps पर चलता है। + +> 💁 यदि आप Raspberry Pi का उपयोग Grove Base hat के साथ IoT हार्डवेयर के रूप में कर रहे हैं, तो आप बोर्ड पर कई I2C सॉकेट देख सकते हैं जिनका उपयोग I2C सेंसर के साथ संचार करने के लिए किया जा सकता है। एनालॉग Grove सेंसर भी I2C का उपयोग ADC के साथ करते हैं ताकि एनालॉग मानों को डिजिटल डेटा के रूप में भेजा जा सके। इसलिए, आपने जो लाइट सेंसर उपयोग किया था, वह एक एनालॉग पिन का अनुकरण करता है, और मान I2C के माध्यम से भेजा जाता है क्योंकि Raspberry Pi केवल डिजिटल पिन का समर्थन करता है। + +### Universal asynchronous receiver-transmitter (UART) + +UART में भौतिक सर्किटरी शामिल होती है जो दो डिवाइसों को संचार करने की अनुमति देती है। प्रत्येक डिवाइस में 2 संचार पिन होते हैं - transmit (Tx) और receive (Rx), जहां पहले डिवाइस का Tx पिन दूसरे डिवाइस के Rx पिन से जुड़ा होता है, और दूसरे डिवाइस का Tx पिन पहले डिवाइस के Rx पिन से जुड़ा होता है। यह डेटा को दोनों दिशाओं में भेजने की अनुमति देता है। + +* डिवाइस 1 अपने Tx पिन से डेटा भेजता है, जिसे डिवाइस 2 अपने Rx पिन पर प्राप्त करता है। +* डिवाइस 1 अपने Rx पिन पर डेटा प्राप्त करता है, जिसे डिवाइस 2 अपने Tx पिन से भेजता है। + +![UART के साथ एक चिप का Tx पिन दूसरे चिप के Rx पिन से जुड़ा हुआ है, और इसके विपरीत](../../../../../translated_images/uart.d0dbd3fb9e3728c6ee1995c8206f3cdb13cdfd208f13745e8ef6854cab75e421.hi.png) + +> 🎓 डेटा एक बार में एक बिट भेजा जाता है, और इसे *serial* संचार कहा जाता है। अधिकांश ऑपरेटिंग सिस्टम और माइक्रोकंट्रोलर में *serial ports* होते हैं, यानी ऐसे कनेक्शन जो सीरियल डेटा भेज और प्राप्त कर सकते हैं और आपके कोड के लिए उपलब्ध होते हैं। + +UART डिवाइसों की एक [baud rate](https://wikipedia.org/wiki/Symbol_rate) होती है (जिसे Symbol rate भी कहा जाता है), जो डेटा भेजने और प्राप्त करने की गति को बिट्स प्रति सेकंड में दर्शाती है। एक सामान्य baud rate 9,600 है, जिसका मतलब है कि हर सेकंड 9,600 बिट्स (0s और 1s) डेटा भेजा जाता है। + +UART स्टार्ट और स्टॉप बिट्स का उपयोग करता है - यानी यह एक स्टार्ट बिट भेजता है यह संकेत देने के लिए कि यह डेटा का एक बाइट (8 बिट्स) भेजने वाला है, और फिर 8 बिट्स भेजने के बाद एक स्टॉप बिट भेजता है। + +UART की गति हार्डवेयर पर निर्भर करती है, लेकिन सबसे तेज़ कार्यान्वयन भी 6.5 Mbps (मेगाबिट्स प्रति सेकंड, या लाखों बिट्स, 0 या 1, प्रति सेकंड भेजे गए) से अधिक नहीं होती। + +आप GPIO पिन्स पर UART का उपयोग कर सकते हैं - आप एक पिन को Tx और दूसरे को Rx के रूप में सेट कर सकते हैं, फिर इन्हें दूसरे डिवाइस से जोड़ सकते हैं। + +> 💁 यदि आप Raspberry Pi का उपयोग Grove Base hat के साथ IoT हार्डवेयर के रूप में कर रहे हैं, तो आप बोर्ड पर एक UART सॉकेट देख सकते हैं जिसका उपयोग UART प्रोटोकॉल का उपयोग करने वाले सेंसर के साथ संचार करने के लिए किया जा सकता है। + +### Serial Peripheral Interface (SPI) + +SPI को छोटे दूरी पर संचार के लिए डिज़ाइन किया गया है, जैसे कि माइक्रोकंट्रोलर पर फ्लैश मेमोरी जैसे स्टोरेज डिवाइस से बात करने के लिए। यह एक controller/peripheral मॉडल पर आधारित है, जिसमें एक सिंगल कंट्रोलर (आमतौर पर IoT डिवाइस का प्रोसेसर) कई peripherals के साथ इंटरैक्ट करता है। कंट्रोलर सब कुछ नियंत्रित करता है, एक peripheral का चयन करता है और डेटा भेजता या अनुरोध करता है। + +> 💁 I2C की तरह, controller और peripheral शब्द हाल ही में बदले गए हैं, इसलिए आप पुराने शब्दों को अभी भी देख सकते हैं। + +SPI कंट्रोलर 3 तारों का उपयोग करता है, साथ ही प्रत्येक peripheral के लिए 1 अतिरिक्त तार। Peripherals 4 तारों का उपयोग करते हैं। ये तार हैं: + +| तार | नाम | विवरण | +| ---- | --------- | ----------- | +| COPI | Controller Output, Peripheral Input | यह तार कंट्रोलर से peripheral तक डेटा भेजने के लिए है। | +| CIPO | Controller Input, Peripheral Output | यह तार peripheral से कंट्रोलर तक डेटा भेजने के लिए है। | +| SCLK | Serial Clock | यह तार कंट्रोलर द्वारा सेट की गई दर पर एक clock signal भेजता है। | +| CS | Chip Select | कंट्रोलर के पास कई तार होते हैं, प्रत्येक peripheral के लिए एक, और प्रत्येक तार संबंधित peripheral के CS तार से जुड़ा होता है। | + +![SPI के साथ एक कंट्रोलर और दो peripherals](../../../../../translated_images/spi.297431d6f98b386b4ff88aea44ce9c1e7acfb1ef69c7e4e388a7aa97b6948e24.hi.png) + +CS तार का उपयोग एक समय में एक peripheral को सक्रिय करने के लिए किया जाता है, COPI और CIPO तारों पर संचार करते हुए। जब कंट्रोलर को peripheral बदलने की आवश्यकता होती है, तो वह वर्तमान में सक्रिय peripheral से जुड़े CS तार को निष्क्रिय करता है, फिर उस तार को सक्रिय करता है जो अगले peripheral से जुड़ा होता है जिससे वह संचार करना चाहता है। + +SPI *full-duplex* है, जिसका मतलब है कि कंट्रोलर एक ही समय में एक ही peripheral से डेटा भेज और प्राप्त कर सकता है, COPI और CIPO तारों का उपयोग करते हुए। SPI SCLK तार पर एक clock signal का उपयोग करता है ताकि डिवाइसों को सिंक में रखा जा सके, इसलिए UART पर सीधे भेजने की तरह इसे स्टार्ट और स्टॉप बिट्स की आवश्यकता नहीं होती। + +SPI के लिए कोई परिभाषित गति सीमा नहीं है, और कार्यान्वयन अक्सर प्रति सेकंड कई मेगाबाइट्स डेटा भेजने में सक्षम होते हैं। + +IoT डेवलपर किट्स अक्सर GPIO पिन्स पर SPI का समर्थन करते हैं। उदाहरण के लिए, Raspberry Pi पर आप GPIO पिन्स 19, 21, 23, 24 और 26 का उपयोग SPI के लिए कर सकते हैं। + +### Wireless + +कुछ सेंसर मानक वायरलेस प्रोटोकॉल जैसे Bluetooth (मुख्य रूप से Bluetooth Low Energy, या BLE), LoRaWAN (एक **Lo**ng **Ra**nge low power नेटवर्किंग प्रोटोकॉल), या WiFi के माध्यम से संचार कर सकते हैं। ये दूरस्थ सेंसरों को IoT डिवाइस से भौतिक रूप से जुड़े बिना काम करने की अनुमति देते हैं। + +एक उदाहरण वाणिज्यिक मिट्टी की नमी सेंसरों में है। ये खेत में मिट्टी की नमी को मापते हैं, फिर डेटा को LoRaWAN के माध्यम से एक हब डिवाइस पर भेजते हैं, जो डेटा को संसाधित करता है या इसे इंटरनेट पर भेजता है। यह सेंसर को उस IoT डिवाइस से दूर रहने की अनुमति देता है जो डेटा का प्रबंधन करता है, जिससे बिजली की खपत कम होती है और बड़े WiFi नेटवर्क या लंबे केबल्स की आवश्यकता समाप्त होती है। + +BLE उन्नत सेंसरों के लिए लोकप्रिय है, जैसे फिटनेस ट्रैकर्स जो कलाई पर काम करते हैं। ये कई सेंसरों को जोड़ते हैं और सेंसर डेटा को आपके फोन के रूप में IoT डिवाइस पर BLE के माध्यम से भेजते हैं। + +✅ क्या आपके पास कोई ब्लूटूथ सेंसर है, आपके घर में या आपके स्कूल में? इनमें तापमान सेंसर, उपस्थिति सेंसर, डिवाइस ट्रैकर्स और फिटनेस डिवाइस शामिल हो सकते हैं। + +वाणिज्यिक डिवाइसों के कनेक्ट होने का एक लोकप्रिय तरीका Zigbee है। Zigbee WiFi का उपयोग करके डिवाइसों के बीच mesh नेटवर्क बनाता है, जहां प्रत्येक डिवाइस जितने संभव हो उतने पास के डिवाइसों से जुड़ता है, एक मकड़ी के जाल की तरह बड़ी संख्या में कनेक्शन बनाता है। जब एक डिवाइस इंटरनेट पर संदेश भेजना चाहता है, तो वह इसे निकटतम डिवाइसों को भेज सकता है, जो इसे अन्य पास के डिवाइसों को आगे बढ़ाते हैं और इसी तरह, जब तक यह एक समन्वयक तक नहीं पहुंचता और इंटरनेट पर भेजा जा सकता है। + +> 🐝 Zigbee नाम मधुमक्खियों के छत्ते में लौटने के बाद उनके waggle dance को संदर्भित करता है। + +## मिट्टी में नमी स्तर मापें + +आप मिट्टी में नमी स्तर को मापने के लिए मिट्टी की नमी सेंसर, एक IoT डिवाइस, और एक हाउस प्लांट या पास के मिट्टी के पैच का उपयोग कर सकते हैं। + +### कार्य - मिट्टी की नमी मापें + +अपने IoT डिवाइस का उपयोग करके मिट्टी की नमी मापने के लिए संबंधित गाइड का पालन करें: + +* [Arduino - Wio Terminal](wio-terminal-soil-moisture.md) +* [Single-board computer - Raspberry Pi](pi-soil-moisture.md) +* [Single-board computer - Virtual device](virtual-device-soil-moisture.md) + +## सेंसर कैलिब्रेशन + +सेंसर विद्युत गुणों जैसे प्रतिरोध या धारिता को मापने पर निर्भर करते हैं। + +> 🎓 प्रतिरोध, जिसे ओम्स (Ω) में मापा जाता है, यह दर्शाता है कि विद्युत प्रवाह को किसी चीज़ के माध्यम से यात्रा करने में कितनी बाधा है। जब किसी सामग्री पर वोल्टेज लगाया जाता है, तो उसके माध्यम से गुजरने वाली धारा की मात्रा उस सामग्री के प्रतिरोध पर निर्भर करती है। आप [विकिपीडिया पर विद्युत प्रतिरोध पृष्ठ](https://wikipedia.org/wiki/Electrical_resistance_and_conductance) पर अधिक पढ़ सकते हैं। + +> 🎓 धारिता, जिसे फैराड्स (F) में मापा जाता है, यह दर्शाती है कि कोई घटक या सर्किट विद्युत ऊर्जा को इकट्ठा और संग्रहीत करने में कितना सक्षम है। आप [विकिपीडिया पर धारिता पृष्ठ](https://wikipedia.org/wiki/Capacitance) पर धारिता के बारे में अधिक पढ़ सकते हैं। + +ये माप हमेशा उपयोगी नहीं होते - कल्पना करें कि एक तापमान सेंसर आपको 22.5KΩ का माप देता है! इसके बजाय मापे गए मान को उपयोगी इकाई में परिवर्तित करने की आवश्यकता होती है, जिसे कैलिब्रेट किया जाता है - यानी मापे गए मानों को मापी गई मात्रा से मिलाना ताकि नए मापों को सही इकाई में परिवर्तित किया जा सके। + +कुछ सेंसर पहले से कैलिब्रेटेड आते हैं। उदाहरण के लिए, आपने पिछले पाठ में जो तापमान सेंसर उपयोग किया था, वह पहले से कैलिब्रेटेड था ताकि वह °C में तापमान माप वापस कर सके। फैक्ट्री में पहला सेंसर बनाया गया था, जिसे ज्ञात तापमानों की एक श्रृंखला के संपर्क में लाया गया और प्रतिरोध मापा गया। इसका उपयोग एक गणना बनाने के लिए किया गया जो Ω (प्रतिरोध की इकाई) में मापे गए मान को °C में परिवर्तित कर सकता है। + +> 💁 तापमान से प्रतिरोध की गणना करने का सूत्र [Steinhart–Hart equation](https://wikipedia.org/wiki/Steinhart–Hart_equation) कहलाता है। + +### मिट्टी की नमी सेंसर कैलिब्रेशन + +मिट्टी की नमी को ग्रेविमेट्रिक या वॉल्यूमेट्रिक जल सामग्री का उपयोग करके मापा जाता है। + +* ग्रेविमेट्रिक मिट्टी के एक यूनिट वजन में पानी के वजन को मापता है, जैसे कि सूखी मिट्टी के प्रति किलोग्राम में पानी के किलोग्राम की संख्या। +* वॉल्यूमेट्रिक मिट्टी के एक यूनिट वॉल्यूम में पानी के वॉल्यूम को मापता है, जैसे कि सूखी मिट्टी के प्रति घन मीटर में पानी के घन मीटर की संख्या। + +> 🇺🇸 अमेरिकियों के लिए, इकाइयों की स्थिरता के कारण, इन्हें किलोग्राम के बजाय पाउंड या घन मीटर के बजाय घन फीट में मापा जा सकता है। + +मिट्टी की नमी सेंसर विद्युत प्रतिरोध या धारिता को मापते हैं - यह न केवल मिट्टी की नमी के अनुसार बदलता है, बल्कि मिट्टी के प्रकार के अनुसार भी, क्योंकि मिट्टी में घटक इसके विद्युत गुणों को बदल सकते हैं। आदर्श रूप से सेंसरों को कैलिब्रेट किया जाना चाहिए - यानी सेंसर से रीडिंग लेना और उन्हें अधिक वैज्ञानिक दृष्टिकोण का उपयोग करके प्राप्त मापों से तुलना करना। उदाहरण के लिए, एक लैब मिट्टी की ग्रेविमेट्रिक नमी की गणना कर सकती है, जो एक विशिष्ट खेत के नमूनों का उपयोग करके साल में कुछ बार ली जाती है, और इन संख्याओं का उपयोग सेंसर को कैलिब्रेट करने के लिए किया जाता है, सेंसर रीडिंग को ग्रेविमेट्रिक मिट्टी की नमी से मिलाना। + +![वोल्टेज बनाम मिट्टी की नमी सामग्री का ग्राफ](../../../../../translated_images/soil-moisture-to-voltage.df86d80cda1587008f312431ed5f79eb6c50c58d4fbc25a6763c5e9127c3106b.hi.png) + +ऊपर दिया गया ग्राफ सेंसर को कैलिब्रेट करने का तरीका दिखाता है। वोल्टेज को मिट्टी के नमूने के लिए कैप्चर किया जाता है, जिसे फिर लैब में मापा जाता है, गीले वजन की तुलना सूखे वजन से करके (गीले वजन को मापकर, फिर ओवन में सुखाकर और सूखे वजन को मापकर)। एक बार कुछ रीडिंग्स ली जाती हैं, तो इन्हें ग्राफ पर प्लॉट किया जा सकता है और बिंदुओं पर एक रेखा फिट की जा सकती है। इस रेखा का उपयोग मिट्टी की नमी सेंसर रीडिंग्स को IoT डिवाइस द्वारा लिए गए वास्तविक मिट्टी की नमी मापों में बदलने के लिए किया जा सकता है। + +💁 प्रतिरोधी मिट्टी की नमी सेंसरों के लिए, वोल्टेज मिट्टी की नमी बढ़ने के साथ बढ़ता है। धारिता मिट्टी की नमी सेंसरों के लिए, वोल्टेज मिट्टी की नमी बढ़ने के साथ घटता है, इसलिए इनका ग्राफ नीचे की ओर ढलान करेगा, ऊपर की ओर नहीं। + +![ग्राफ से मिट्टी की नमी का मान इंटरपोलेट किया गया](../../../../../translated_images/soil-moisture-to-voltage-with-reading.681cb3e1f8b68caf5547dbf1415851c82e201edfb78face16fc98da4051ed9b2.hi.png) + +ऊपर दिया गया ग्राफ मिट्टी की नमी सेंसर से एक वोल्टेज रीडिंग दिखाता है, और ग्राफ पर उस रेखा तक उसका अनुसरण करके, वास्तविक मिट्टी की नमी की गणना की जा सकती है। + +इस दृष्टिकोण का मतलब है कि किसान को केवल एक खेत के लिए कुछ लैब माप प्राप्त करने की आवश्यकता होती है, फिर वे IoT डिवाइसों का उपयोग करके मिट्टी की नमी माप सकते हैं - माप लेने के समय को काफी तेज़ी से बढ़ाते हुए। + +--- + +## 🚀 चुनौती + +प्रतिरोधी और धारिता मिट्टी की नमी सेंसरों में कई अंतर होते हैं। ये अंतर क्या हैं, और किसान के लिए कौन सा प्रकार (यदि कोई हो) सबसे अच्छा है? क्या यह उत्तर विकसित और विकासशील देशों के बीच बदलता है? + +## पोस्ट-लेक्चर क्विज़ + +[पोस्ट-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/12) + +## समीक्षा और स्व-अध्ययन + +सेंसर और एक्ट्यूएटर्स द्वारा उपयोग किए जाने वाले हार्डवेयर और प्रोटोकॉल के बारे में पढ़ें: + +* [GPIO विकिपीडिया पृष्ठ](https://wikipedia.org/wiki/General-purpose_input/output) +* [UART विकिपीडिया पृष्ठ](https://wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter) +* [SPI विकिपीडिया पृष्ठ](https://wikipedia.org/wiki/Serial_Peripheral_Interface) +* [I2C विकिपीडिया पृष्ठ](https://wikipedia.org/wiki/I²C) +* [Zigbee विकिपीडिया पृष्ठ](https://wikipedia.org/wiki/Zigbee) + +## असाइनमेंट + +[अपने सेंसर को कैलिब्रेट करें](assignment.md) + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/2-detect-soil-moisture/assignment.md b/translations/hi/2-farm/lessons/2-detect-soil-moisture/assignment.md new file mode 100644 index 00000000..167c81f8 --- /dev/null +++ b/translations/hi/2-farm/lessons/2-detect-soil-moisture/assignment.md @@ -0,0 +1,59 @@ + +# अपने सेंसर को कैलिब्रेट करें + +## निर्देश + +इस पाठ में आपने मिट्टी की नमी सेंसर रीडिंग्स को 0-1023 के मानों के रूप में एकत्र किया। इन रीडिंग्स को वास्तविक मिट्टी की नमी में बदलने के लिए, आपको अपने सेंसर को कैलिब्रेट करना होगा। आप यह मिट्टी के नमूनों से रीडिंग लेकर और इन नमूनों से ग्रेविमेट्रिक मिट्टी की नमी की मात्रा की गणना करके कर सकते हैं। + +आपको इन चरणों को कई बार दोहराना होगा ताकि आवश्यक रीडिंग्स प्राप्त हो सकें, हर बार मिट्टी की अलग-अलग गीलेपन के साथ। + +1. मिट्टी की नमी सेंसर का उपयोग करके मिट्टी की नमी की रीडिंग लें। इस रीडिंग को लिख लें। + +1. मिट्टी का एक नमूना लें और उसका वजन करें। इस वजन को लिख लें। + +1. मिट्टी को सुखाएं - इसे सुखाने का सबसे अच्छा तरीका है कि इसे 110°C (230°F) पर कुछ घंटों के लिए गर्म ओवन में रखें। आप इसे धूप में भी सुखा सकते हैं, या इसे किसी गर्म, सूखी जगह पर रख सकते हैं जब तक कि मिट्टी पूरी तरह से सूख न जाए। यह पाउडर जैसी और ढीली होनी चाहिए। + + > 💁 प्रयोगशाला में सबसे सटीक परिणामों के लिए आप इसे 48-72 घंटों तक ओवन में सुखाएंगे। यदि आपके स्कूल में सुखाने वाले ओवन हैं, तो देखें कि क्या आप इन्हें लंबे समय तक सुखाने के लिए उपयोग कर सकते हैं। जितना अधिक समय, उतनी अधिक सूखी मिट्टी और उतने अधिक सटीक परिणाम। + +1. मिट्टी का फिर से वजन करें। + + > 🔥 यदि आपने इसे ओवन में सुखाया है, तो सुनिश्चित करें कि यह पहले ठंडा हो गया हो! + +ग्रेविमेट्रिक मिट्टी की नमी की गणना इस प्रकार की जाती है: + +![मिट्टी की नमी % = गीली मिट्टी का वजन - सूखी मिट्टी का वजन, ÷ सूखी मिट्टी का वजन, × 100](../../../../../translated_images/gsm-calculation.6da38c6201eec14e7573bb2647aa18892883193553d23c9d77e5dc681522dfb2.hi.png) + +* W - गीली मिट्टी का वजन +* W - सूखी मिट्टी का वजन + +उदाहरण के लिए, मान लें कि आपके पास एक मिट्टी का नमूना है जिसका वजन गीला होने पर 212g और सूखा होने पर 197g है। + +![गणना भरी हुई](../../../../../translated_images/gsm-calculation-example.99f9803b4f29e97668e7c15412136c0c399ab12dbba0b89596fdae9d8aedb6fb.hi.png) + +* W = 212g +* W = 197g +* 212 - 197 = 15 +* 15 / 197 = 0.076 +* 0.076 * 100 = 7.6% + +इस उदाहरण में, मिट्टी की ग्रेविमेट्रिक नमी 7.6% है। + +जब आपके पास कम से कम 3 नमूनों की रीडिंग्स हों, तो मिट्टी की नमी % को मिट्टी की नमी सेंसर रीडिंग के साथ ग्राफ पर प्लॉट करें और बिंदुओं के लिए सबसे उपयुक्त रेखा जोड़ें। आप इसका उपयोग सेंसर रीडिंग के लिए ग्रेविमेट्रिक मिट्टी की नमी की मात्रा की गणना करने के लिए कर सकते हैं, रेखा से मान पढ़कर। + +## मूल्यांकन मानदंड + +| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | +| -------- | --------- | -------- | ----------------- | +| कैलिब्रेशन डेटा एकत्र करें | कम से कम 3 कैलिब्रेशन नमूनों को कैप्चर करें | कम से कम 2 कैलिब्रेशन नमूनों को कैप्चर करें | कम से कम 1 कैलिब्रेशन नमूना कैप्चर करें | +| कैलिब्रेटेड रीडिंग बनाएं | सफलतापूर्वक कैलिब्रेशन ग्राफ प्लॉट करें और सेंसर से रीडिंग लें, और इसे ग्रेविमेट्रिक मिट्टी की नमी में बदलें | सफलतापूर्वक कैलिब्रेशन ग्राफ प्लॉट करें | ग्राफ प्लॉट करने में असमर्थ | + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/2-detect-soil-moisture/pi-soil-moisture.md b/translations/hi/2-farm/lessons/2-detect-soil-moisture/pi-soil-moisture.md new file mode 100644 index 00000000..c980ec84 --- /dev/null +++ b/translations/hi/2-farm/lessons/2-detect-soil-moisture/pi-soil-moisture.md @@ -0,0 +1,106 @@ + +# मिट्टी की नमी मापें - रास्पबेरी पाई + +इस पाठ के इस भाग में, आप अपने रास्पबेरी पाई में एक कैपेसिटिव मिट्टी नमी सेंसर जोड़ेंगे और इससे मान पढ़ेंगे। + +## हार्डवेयर + +रास्पबेरी पाई को एक कैपेसिटिव मिट्टी नमी सेंसर की आवश्यकता है। + +आप जो सेंसर उपयोग करेंगे वह [Capacitive Soil Moisture Sensor](https://www.seeedstudio.com/Grove-Capacitive-Moisture-Sensor-Corrosion-Resistant.html) है, जो मिट्टी की नमी को मापता है। यह सेंसर मिट्टी की कैपेसिटेंस का पता लगाकर नमी मापता है, जो मिट्टी की नमी बदलने पर बदलती है। जैसे-जैसे मिट्टी की नमी बढ़ती है, वोल्टेज घटता है। + +यह एक एनालॉग सेंसर है, जो एनालॉग पिन का उपयोग करता है और पाई पर Grove Base Hat में 10-बिट ADC वोल्टेज को डिजिटल सिग्नल (1-1,023) में बदलने के लिए उपयोग करता है। यह फिर GPIO पिन्स के माध्यम से पाई पर I²C के जरिए भेजा जाता है। + +### मिट्टी नमी सेंसर को कनेक्ट करें + +Grove मिट्टी नमी सेंसर को रास्पबेरी पाई से जोड़ा जा सकता है। + +#### कार्य - मिट्टी नमी सेंसर को कनेक्ट करें + +मिट्टी नमी सेंसर को कनेक्ट करें। + +![एक Grove मिट्टी नमी सेंसर](../../../../../translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.hi.png) + +1. Grove केबल के एक सिरे को मिट्टी नमी सेंसर के सॉकेट में डालें। यह केवल एक ही दिशा में जाएगा। + +1. रास्पबेरी पाई को बंद करके, Grove केबल के दूसरे सिरे को Grove Base Hat पर **A0** चिह्नित एनालॉग सॉकेट में कनेक्ट करें। यह सॉकेट GPIO पिन्स के पास वाली पंक्ति में दाईं ओर से दूसरा है। + +![A0 सॉकेट से जुड़ा Grove मिट्टी नमी सेंसर](../../../../../translated_images/pi-soil-moisture-sensor.fdd7eb2393792cf6739cacf1985d9f55beda16d372f30d0b5a51d586f978a870.hi.png) + +1. मिट्टी नमी सेंसर को मिट्टी में डालें। इसमें एक 'उच्चतम स्थिति रेखा' होती है - सेंसर पर एक सफेद रेखा। सेंसर को इस रेखा तक, लेकिन इससे आगे नहीं डालें। + +![मिट्टी में Grove मिट्टी नमी सेंसर](../../../../../translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.hi.png) + +## मिट्टी नमी सेंसर को प्रोग्राम करें + +अब रास्पबेरी पाई को जुड़े हुए मिट्टी नमी सेंसर का उपयोग करने के लिए प्रोग्राम किया जा सकता है। + +### कार्य - मिट्टी नमी सेंसर को प्रोग्राम करें + +डिवाइस को प्रोग्राम करें। + +1. पाई को चालू करें और इसके बूट होने का इंतजार करें। + +1. VS Code लॉन्च करें, या तो सीधे पाई पर, या Remote SSH एक्सटेंशन के माध्यम से कनेक्ट करें। + + > ⚠️ यदि आवश्यक हो, तो [नाइटलाइट - पाठ 1 में VS Code सेटअप और लॉन्च करने के निर्देश देखें](../../../1-getting-started/lessons/1-introduction-to-iot/pi.md)। + +1. टर्मिनल से, `pi` उपयोगकर्ता की होम डायरेक्टरी में `soil-moisture-sensor` नामक एक नया फ़ोल्डर बनाएं। इस फ़ोल्डर में `app.py` नामक एक फ़ाइल बनाएं। + +1. इस फ़ोल्डर को VS Code में खोलें। + +1. `app.py` फ़ाइल में निम्न कोड जोड़ें ताकि आवश्यक लाइब्रेरी आयात की जा सकें: + + ```python + import time + from grove.adc import ADC + ``` + + `import time` स्टेटमेंट `time` मॉड्यूल को आयात करता है, जिसका उपयोग बाद में इस असाइनमेंट में किया जाएगा। + + `from grove.adc import ADC` स्टेटमेंट Grove Python लाइब्रेरी से `ADC` को आयात करता है। यह लाइब्रेरी पाई बेस हैट पर एनालॉग से डिजिटल कन्वर्टर के साथ इंटरैक्ट करने और एनालॉग सेंसर से वोल्टेज पढ़ने के लिए कोड प्रदान करती है। + +1. इसके नीचे निम्न कोड जोड़ें ताकि `ADC` क्लास का एक इंस्टेंस बनाया जा सके: + + ```python + adc = ADC() + ``` + +1. एक अनंत लूप जोड़ें जो A0 पिन पर इस ADC से पढ़ता है और परिणाम को कंसोल पर लिखता है। यह लूप प्रत्येक रीडिंग के बीच 10 सेकंड के लिए रुकेगा। + + ```python + while True: + soil_moisture = adc.read(0) + print("Soil moisture:", soil_moisture) + + time.sleep(10) + ``` + +1. Python ऐप चलाएं। आप कंसोल पर मिट्टी नमी माप देखेंगे। मिट्टी में पानी डालें, या सेंसर को मिट्टी से हटा दें, और मान बदलते हुए देखें। + + ```output + pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py + Soil moisture: 615 + Soil moisture: 612 + Soil moisture: 498 + Soil moisture: 493 + Soil moisture: 490 + Soil Moisture: 388 + ``` + + ऊपर दिए गए उदाहरण आउटपुट में, आप देख सकते हैं कि पानी डालने पर वोल्टेज कैसे घटता है। + +> 💁 आप इस कोड को [code/pi](../../../../../2-farm/lessons/2-detect-soil-moisture/code/pi) फ़ोल्डर में पा सकते हैं। + +😀 आपका मिट्टी नमी सेंसर प्रोग्राम सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/2-detect-soil-moisture/virtual-device-soil-moisture.md b/translations/hi/2-farm/lessons/2-detect-soil-moisture/virtual-device-soil-moisture.md new file mode 100644 index 00000000..d375a779 --- /dev/null +++ b/translations/hi/2-farm/lessons/2-detect-soil-moisture/virtual-device-soil-moisture.md @@ -0,0 +1,121 @@ + +# मिट्टी की नमी मापें - वर्चुअल IoT हार्डवेयर + +इस पाठ के इस भाग में, आप अपने वर्चुअल IoT डिवाइस में एक कैपेसिटिव मिट्टी नमी सेंसर जोड़ेंगे और इससे मान पढ़ेंगे। + +## वर्चुअल हार्डवेयर + +वर्चुअल IoT डिवाइस एक सिम्युलेटेड Grove कैपेसिटिव मिट्टी नमी सेंसर का उपयोग करेगा। यह प्रयोग को उसी तरह बनाए रखता है जैसे कि एक Raspberry Pi के साथ एक भौतिक Grove कैपेसिटिव मिट्टी नमी सेंसर का उपयोग करना। + +एक भौतिक IoT डिवाइस में, मिट्टी नमी सेंसर एक कैपेसिटिव सेंसर होता है जो मिट्टी की नमी को मापता है, मिट्टी की कैपेसिटेंस का पता लगाकर, जो मिट्टी की नमी बदलने पर बदलती है। जैसे-जैसे मिट्टी की नमी बढ़ती है, वोल्टेज घटता है। + +यह एक एनालॉग सेंसर है, इसलिए यह 10-बिट ADC का उपयोग करके 1-1,023 के बीच मान रिपोर्ट करता है। + +### CounterFit में मिट्टी नमी सेंसर जोड़ें + +वर्चुअल मिट्टी नमी सेंसर का उपयोग करने के लिए, आपको इसे CounterFit ऐप में जोड़ना होगा। + +#### कार्य - CounterFit में मिट्टी नमी सेंसर जोड़ें + +CounterFit ऐप में मिट्टी नमी सेंसर जोड़ें। + +1. अपने कंप्यूटर पर `soil-moisture-sensor` नामक एक फ़ोल्डर में एक नया Python ऐप बनाएं, जिसमें `app.py` नामक एक फ़ाइल और एक Python वर्चुअल एनवायरनमेंट हो, और CounterFit pip पैकेज जोड़ें। + + > ⚠️ यदि आवश्यक हो, तो [पाठ 1 में CounterFit Python प्रोजेक्ट बनाने और सेटअप करने के निर्देशों का संदर्भ लें](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md)। + +1. सुनिश्चित करें कि CounterFit वेब ऐप चल रहा है। + +1. मिट्टी नमी सेंसर बनाएं: + + 1. *Sensors* पैन में *Create sensor* बॉक्स में, *Sensor type* ड्रॉपडाउन करें और *Soil Moisture* चुनें। + + 1. *Units* को *NoUnits* पर सेट रहने दें। + + 1. सुनिश्चित करें कि *Pin* को *0* पर सेट किया गया है। + + 1. **Add** बटन चुनें ताकि *Soil Moisture* सेंसर Pin 0 पर बनाया जा सके। + + ![मिट्टी नमी सेंसर सेटिंग्स](../../../../../translated_images/counterfit-create-soil-moisture-sensor.35266135a5e0ae68b29a684d7db0d2933a8098b2307d197f7c71577b724603aa.hi.png) + + मिट्टी नमी सेंसर बनाया जाएगा और सेंसर सूची में दिखाई देगा। + + ![मिट्टी नमी सेंसर बनाया गया](../../../../../translated_images/counterfit-soil-moisture-sensor.81742b2de0e9de60a3b3b9a2ff8ecc686d428eb6d71820f27a693be26e5aceee.hi.png) + +## मिट्टी नमी सेंसर ऐप प्रोग्राम करें + +अब मिट्टी नमी सेंसर ऐप को CounterFit सेंसर का उपयोग करके प्रोग्राम किया जा सकता है। + +### कार्य - मिट्टी नमी सेंसर ऐप प्रोग्राम करें + +मिट्टी नमी सेंसर ऐप प्रोग्राम करें। + +1. सुनिश्चित करें कि `soil-moisture-sensor` ऐप VS Code में खुला है। + +1. `app.py` फ़ाइल खोलें। + +1. CounterFit से ऐप को कनेक्ट करने के लिए `app.py` के शीर्ष पर निम्न कोड जोड़ें: + + ```python + from counterfit_connection import CounterFitConnection + CounterFitConnection.init('127.0.0.1', 5000) + ``` + +1. कुछ आवश्यक लाइब्रेरी आयात करने के लिए `app.py` फ़ाइल में निम्न कोड जोड़ें: + + ```python + import time + from counterfit_shims_grove.adc import ADC + ``` + + `import time` स्टेटमेंट `time` मॉड्यूल को आयात करता है, जिसका उपयोग बाद में इस असाइनमेंट में किया जाएगा। + + `from counterfit_shims_grove.adc import ADC` स्टेटमेंट `ADC` क्लास को आयात करता है ताकि CounterFit सेंसर से कनेक्ट होने वाले वर्चुअल एनालॉग टू डिजिटल कन्वर्टर के साथ इंटरैक्ट किया जा सके। + +1. इसके नीचे निम्न कोड जोड़ें ताकि `ADC` क्लास का एक इंस्टेंस बनाया जा सके: + + ```python + adc = ADC() + ``` + +1. एक अनंत लूप जोड़ें जो Pin 0 पर इस ADC से पढ़ता है और परिणाम को कंसोल पर लिखता है। यह लूप प्रत्येक पढ़ने के बीच 10 सेकंड के लिए सो सकता है। + + ```python + while True: + soil_moisture = adc.read(0) + print("Soil moisture:", soil_moisture) + + time.sleep(10) + ``` + +1. CounterFit ऐप से, मिट्टी नमी सेंसर का मान बदलें जिसे ऐप द्वारा पढ़ा जाएगा। आप इसे दो तरीकों में से एक में कर सकते हैं: + + * मिट्टी नमी सेंसर के लिए *Value* बॉक्स में एक संख्या दर्ज करें, फिर **Set** बटन चुनें। आपके द्वारा दर्ज की गई संख्या सेंसर द्वारा लौटाया गया मान होगी। + + * *Random* चेकबॉक्स को चेक करें, और *Min* और *Max* मान दर्ज करें, फिर **Set** बटन चुनें। हर बार जब सेंसर एक मान पढ़ता है, तो यह *Min* और *Max* के बीच एक रैंडम संख्या पढ़ेगा। + +1. Python ऐप चलाएं। आप कंसोल पर मिट्टी नमी माप देखेंगे। *Value* या *Random* सेटिंग्स बदलें ताकि मान बदलता हुआ दिखाई दे। + + ```output + (.venv) ➜ soil-moisture-sensor $ python app.py + Soil moisture: 615 + Soil moisture: 612 + Soil moisture: 498 + Soil moisture: 493 + Soil moisture: 490 + Soil Moisture: 388 + ``` + +> 💁 आप इस कोड को [code/virtual-device](../../../../../2-farm/lessons/2-detect-soil-moisture/code/virtual-device) फ़ोल्डर में पा सकते हैं। + +😀 आपका मिट्टी नमी सेंसर प्रोग्राम सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/2-detect-soil-moisture/wio-terminal-soil-moisture.md b/translations/hi/2-farm/lessons/2-detect-soil-moisture/wio-terminal-soil-moisture.md new file mode 100644 index 00000000..466b853f --- /dev/null +++ b/translations/hi/2-farm/lessons/2-detect-soil-moisture/wio-terminal-soil-moisture.md @@ -0,0 +1,115 @@ + +# मिट्टी की नमी मापें - Wio Terminal + +इस पाठ के इस भाग में, आप अपने Wio Terminal में एक कैपेसिटिव मिट्टी नमी सेंसर जोड़ेंगे और इससे मान पढ़ेंगे। + +## हार्डवेयर + +Wio Terminal को एक कैपेसिटिव मिट्टी नमी सेंसर की आवश्यकता है। + +आप जो सेंसर उपयोग करेंगे वह है [Capacitive Soil Moisture Sensor](https://www.seeedstudio.com/Grove-Capacitive-Moisture-Sensor-Corrosion-Resistant.html), जो मिट्टी की नमी को मापता है मिट्टी की कैपेसिटेंस का पता लगाकर। यह एक गुण है जो मिट्टी की नमी के बदलने पर बदलता है। जैसे-जैसे मिट्टी की नमी बढ़ती है, वोल्टेज घटता है। + +यह एक एनालॉग सेंसर है, इसलिए यह Wio Terminal के एनालॉग पिन से जुड़ता है और ऑनबोर्ड ADC का उपयोग करके 0-1,023 के बीच एक मान उत्पन्न करता है। + +### मिट्टी नमी सेंसर को कनेक्ट करें + +Grove मिट्टी नमी सेंसर को Wio Terminal के कॉन्फ़िगर करने योग्य एनालॉग/डिजिटल पोर्ट से जोड़ा जा सकता है। + +#### कार्य - मिट्टी नमी सेंसर को कनेक्ट करें + +मिट्टी नमी सेंसर को कनेक्ट करें। + +![Grove मिट्टी नमी सेंसर](../../../../../translated_images/grove-capacitive-soil-moisture-sensor.e7f0776cce30e78be5cc5a07839385fd6718857f31b5bf5ad3d0c73c83b2f0ef.hi.png) + +1. Grove केबल के एक सिरे को मिट्टी नमी सेंसर के सॉकेट में डालें। यह केवल एक ही दिशा में जाएगा। + +1. Wio Terminal को अपने कंप्यूटर या अन्य पावर स्रोत से डिस्कनेक्ट करके रखें, और Grove केबल के दूसरे सिरे को Wio Terminal के स्क्रीन की ओर देखते हुए दाईं ओर के Grove सॉकेट में कनेक्ट करें। यह सॉकेट पावर बटन से सबसे दूर है। + +![Grove मिट्टी नमी सेंसर दाएं सॉकेट से जुड़ा हुआ](../../../../../translated_images/wio-soil-moisture-sensor.46919b61c3f6cb7497662251b29038ee0e57a4c8b9d071feb996c3b0d7f65aaf.hi.png) + +1. मिट्टी नमी सेंसर को मिट्टी में डालें। इसमें एक 'उच्चतम स्थिति रेखा' होती है - सेंसर पर एक सफेद रेखा। सेंसर को इस रेखा तक डालें लेकिन इसे पार न करें। + +![मिट्टी में Grove मिट्टी नमी सेंसर](../../../../../translated_images/soil-moisture-sensor-in-soil.bfad91002bda5e960f8c51ee64b02ee59b32c8c717e3515a2c945f33e614e403.hi.png) + +1. अब आप Wio Terminal को अपने कंप्यूटर से कनेक्ट कर सकते हैं। + +## मिट्टी नमी सेंसर को प्रोग्राम करें + +अब Wio Terminal को जुड़े हुए मिट्टी नमी सेंसर का उपयोग करने के लिए प्रोग्राम किया जा सकता है। + +### कार्य - मिट्टी नमी सेंसर को प्रोग्राम करें + +डिवाइस को प्रोग्राम करें। + +1. PlatformIO का उपयोग करके एक नया Wio Terminal प्रोजेक्ट बनाएं। इस प्रोजेक्ट का नाम `soil-moisture-sensor` रखें। `setup` फ़ंक्शन में सीरियल पोर्ट को कॉन्फ़िगर करने के लिए कोड जोड़ें। + + > ⚠️ यदि आवश्यक हो, तो [प्रोजेक्ट 1, पाठ 1 में PlatformIO प्रोजेक्ट बनाने के निर्देश देखें](../../../1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md#create-a-platformio-project)। + +1. इस सेंसर के लिए कोई लाइब्रेरी उपलब्ध नहीं है, इसके बजाय आप एनालॉग पिन से मान पढ़ने के लिए Arduino के अंतर्निहित [`analogRead`](https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/) फ़ंक्शन का उपयोग कर सकते हैं। सबसे पहले, एनालॉग पिन को इनपुट के लिए कॉन्फ़िगर करें ताकि इससे मान पढ़े जा सकें। इसे `setup` फ़ंक्शन में निम्नलिखित कोड जोड़कर करें: + + ```cpp + pinMode(A0, INPUT); + ``` + + यह `A0` पिन, जो कि संयुक्त एनालॉग/डिजिटल पिन है, को एक इनपुट पिन के रूप में सेट करता है जिससे वोल्टेज पढ़ा जा सके। + +1. `loop` फ़ंक्शन में निम्नलिखित कोड जोड़ें ताकि इस पिन से वोल्टेज पढ़ा जा सके: + + ```cpp + int soil_moisture = analogRead(A0); + ``` + +1. इस कोड के नीचे, सीरियल पोर्ट पर मान प्रिंट करने के लिए निम्नलिखित कोड जोड़ें: + + ```cpp + Serial.print("Soil Moisture: "); + Serial.println(soil_moisture); + ``` + +1. अंत में, 10 सेकंड की देरी जोड़ें: + + ```cpp + delay(10000); + ``` + +1. कोड को Wio Terminal पर बिल्ड और अपलोड करें। + + > ⚠️ यदि आवश्यक हो, तो [प्रोजेक्ट 1, पाठ 1 में PlatformIO प्रोजेक्ट बनाने के निर्देश देखें](../../../1-getting-started/lessons/1-introduction-to-iot/wio-terminal.md#write-the-hello-world-app)। + +1. अपलोड हो जाने के बाद, आप सीरियल मॉनिटर का उपयोग करके मिट्टी की नमी की निगरानी कर सकते हैं। मिट्टी में पानी डालें, या सेंसर को मिट्टी से हटा दें, और मान बदलते हुए देखें। + + ```output + > Executing task: platformio device monitor < + + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem1201 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + Soil Moisture: 526 + Soil Moisture: 529 + Soil Moisture: 521 + Soil Moisture: 494 + Soil Moisture: 454 + Soil Moisture: 456 + Soil Moisture: 395 + Soil Moisture: 388 + Soil Moisture: 394 + Soil Moisture: 391 + ``` + + ऊपर दिए गए उदाहरण आउटपुट में, आप देख सकते हैं कि पानी डालने पर वोल्टेज कैसे गिरता है। + +> 💁 आप इस कोड को [code/wio-terminal](../../../../../2-farm/lessons/2-detect-soil-moisture/code/wio-terminal) फ़ोल्डर में पा सकते हैं। + +😀 आपका मिट्टी नमी सेंसर प्रोग्राम सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/3-automated-plant-watering/README.md b/translations/hi/2-farm/lessons/3-automated-plant-watering/README.md new file mode 100644 index 00000000..bf0f6951 --- /dev/null +++ b/translations/hi/2-farm/lessons/3-automated-plant-watering/README.md @@ -0,0 +1,312 @@ + +# स्वचालित पौधों की सिंचाई + +![इस पाठ का एक स्केच नोट अवलोकन](../../../../../translated_images/lesson-7.30b5f577d3cb8e031238751475cb519c7d6dbaea261b5df4643d086ffb2a03bb.hi.jpg) + +> स्केच नोट [नित्या नरसिम्हन](https://github.com/nitya) द्वारा। बड़े संस्करण के लिए छवि पर क्लिक करें। + +यह पाठ [IoT for Beginners Project 2 - Digital Agriculture series](https://youtube.com/playlist?list=PLmsFUfdnGr3yCutmcVg6eAUEfsGiFXgcx) के हिस्से के रूप में [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn) से सिखाया गया था। + +[![IoT संचालित स्वचालित पौधों की सिंचाई](https://img.youtube.com/vi/g9FfZwv9R58/0.jpg)](https://youtu.be/g9FfZwv9R58) + +## व्याख्यान से पहले का क्विज़ + +[व्याख्यान से पहले का क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/13) + +## परिचय + +पिछले पाठ में, आपने मिट्टी की नमी की निगरानी करना सीखा। इस पाठ में आप एक स्वचालित सिंचाई प्रणाली के मुख्य घटकों को बनाना सीखेंगे, जो मिट्टी की नमी के अनुसार प्रतिक्रिया करती है। आप समय के बारे में भी जानेंगे - कैसे सेंसर को परिवर्तनों का जवाब देने में समय लग सकता है, और कैसे एक्ट्यूएटर्स को सेंसर द्वारा मापे जा रहे गुणों को बदलने में समय लग सकता है। + +इस पाठ में हम कवर करेंगे: + +* [कम पावर वाले IoT डिवाइस से उच्च पावर वाले उपकरणों को नियंत्रित करना](../../../../../2-farm/lessons/3-automated-plant-watering) +* [रिले को नियंत्रित करना](../../../../../2-farm/lessons/3-automated-plant-watering) +* [MQTT के माध्यम से अपने पौधे को नियंत्रित करना](../../../../../2-farm/lessons/3-automated-plant-watering) +* [सेंसर और एक्ट्यूएटर का समय](../../../../../2-farm/lessons/3-automated-plant-watering) +* [अपने पौधे नियंत्रण सर्वर में समय जोड़ें](../../../../../2-farm/lessons/3-automated-plant-watering) + +## कम पावर वाले IoT डिवाइस से उच्च पावर वाले उपकरणों को नियंत्रित करना + +IoT डिवाइस कम वोल्टेज का उपयोग करते हैं। यह सेंसर और कम पावर वाले एक्ट्यूएटर्स जैसे कि LEDs के लिए पर्याप्त है, लेकिन सिंचाई के लिए उपयोग किए जाने वाले पानी के पंप जैसे बड़े हार्डवेयर को नियंत्रित करने के लिए यह बहुत कम है। यहां तक कि छोटे पंप, जिन्हें आप हाउसप्लांट्स के लिए उपयोग कर सकते हैं, IoT डिवाइस के लिए बहुत अधिक करंट खींचते हैं और बोर्ड को खराब कर सकते हैं। + +> 🎓 करंट, जिसे एम्प्स (A) में मापा जाता है, एक सर्किट के माध्यम से प्रवाहित होने वाली बिजली की मात्रा है। वोल्टेज धक्का प्रदान करता है, और करंट यह दर्शाता है कि कितना धक्का दिया जा रहा है। करंट के बारे में अधिक पढ़ने के लिए [विकिपीडिया पर इलेक्ट्रिक करंट पेज](https://wikipedia.org/wiki/Electric_current) देखें। + +इसका समाधान यह है कि पंप को एक बाहरी पावर सप्लाई से जोड़ा जाए, और एक एक्ट्यूएटर का उपयोग करके पंप को चालू किया जाए, जैसे कि आप एक लाइट को चालू करने के लिए स्विच का उपयोग करते हैं। आपके उंगली से स्विच को फ्लिप करने के लिए बहुत कम ऊर्जा (आपके शरीर में ऊर्जा के रूप में) की आवश्यकता होती है, और यह लाइट को 110v/240v पर चलने वाली मुख्य बिजली से जोड़ता है। + +![एक लाइट स्विच लाइट को पावर चालू करता है](../../../../../translated_images/light-switch.760317ad6ab8bd6d611da5352dfe9c73a94a0822ccec7df3c8bae35da18e1658.hi.png) + +> 🎓 [मेन बिजली](https://wikipedia.org/wiki/Mains_electricity) का मतलब है वह बिजली जो दुनिया के कई हिस्सों में राष्ट्रीय बुनियादी ढांचे के माध्यम से घरों और व्यवसायों को दी जाती है। + +✅ IoT डिवाइस आमतौर पर 3.3V या 5V प्रदान कर सकते हैं, जो 1 एम्प (1A) से कम करंट पर होता है। इसकी तुलना मुख्य बिजली से करें, जो अक्सर 230V (उत्तर अमेरिका में 120V और जापान में 100V) पर होती है, और 30A तक करंट खींचने वाले उपकरणों को पावर प्रदान कर सकती है। + +ऐसे कई एक्ट्यूएटर्स हैं जो यह कर सकते हैं, जिनमें यांत्रिक उपकरण शामिल हैं जिन्हें आप मौजूदा स्विचों से जोड़ सकते हैं और उन्हें चालू करने के लिए उंगली की नकल कर सकते हैं। सबसे लोकप्रिय एक रिले है। + +### रिले + +रिले एक इलेक्ट्रोमैकेनिकल स्विच है जो एक विद्युत संकेत को यांत्रिक गति में बदलता है, जो एक स्विच को चालू करता है। रिले का मुख्य भाग एक इलेक्ट्रोमैग्नेट है। + +> 🎓 [इलेक्ट्रोमैग्नेट्स](https://wikipedia.org/wiki/Electromagnet) वे मैग्नेट हैं जो एक तार के कॉइल के माध्यम से बिजली प्रवाहित करके बनाए जाते हैं। जब बिजली चालू होती है, तो कॉइल चुंबकीय हो जाता है। जब बिजली बंद होती है, तो कॉइल अपनी चुंबकीयता खो देता है। + +![जब चालू होता है, तो इलेक्ट्रोमैग्नेट एक चुंबकीय क्षेत्र बनाता है, आउटपुट सर्किट के लिए स्विच को चालू करता है](../../../../../translated_images/relay-on.4db16a0fd6b669262fd6699aff3fbcd31b6057c06d90411b6bddc06326d1cf75.hi.png) + +एक रिले में, एक नियंत्रण सर्किट इलेक्ट्रोमैग्नेट को पावर देता है। जब इलेक्ट्रोमैग्नेट चालू होता है, तो यह एक लीवर को खींचता है जो एक स्विच को हिलाता है, संपर्कों की एक जोड़ी को बंद करता है और एक आउटपुट सर्किट को पूरा करता है। + +![जब बंद होता है, तो इलेक्ट्रोमैग्नेट चुंबकीय क्षेत्र नहीं बनाता, आउटपुट सर्किट के लिए स्विच को बंद करता है](../../../../../translated_images/relay-off.c34a178a2960fecdc3c6400d43e633ed11c6746cd653cfb4a768fa097c40394c.hi.png) + +जब नियंत्रण सर्किट बंद होता है, तो इलेक्ट्रोमैग्नेट बंद हो जाता है, लीवर को छोड़ देता है और संपर्कों को खोल देता है, आउटपुट सर्किट को बंद कर देता है। रिले डिजिटल एक्ट्यूएटर्स हैं - रिले को चालू करने के लिए एक उच्च सिग्नल और इसे बंद करने के लिए एक निम्न सिग्नल की आवश्यकता होती है। + +आउटपुट सर्किट का उपयोग अतिरिक्त हार्डवेयर को पावर देने के लिए किया जा सकता है, जैसे कि सिंचाई प्रणाली। IoT डिवाइस रिले को चालू कर सकता है, आउटपुट सर्किट को पूरा कर सकता है जो सिंचाई प्रणाली को पावर देता है, और पौधों को पानी मिलता है। फिर IoT डिवाइस रिले को बंद कर सकता है, सिंचाई प्रणाली को पावर काट सकता है, और पानी बंद कर सकता है। + +![एक रिले चालू हो रहा है, एक पंप चालू कर रहा है जो पौधे को पानी भेज रहा है](../../../../../images/strawberry-pump.gif) + +ऊपर दिए गए वीडियो में, एक रिले चालू हो रहा है। रिले पर एक LED जलती है जो यह संकेत देती है कि यह चालू है (कुछ रिले बोर्डों में यह संकेत देने के लिए LED होती है कि रिले चालू है या बंद), और पंप को पावर भेजी जाती है, जो इसे चालू करती है और पौधे में पानी पंप करती है। + +> 💁 रिले का उपयोग दो आउटपुट सर्किटों के बीच स्विच करने के लिए भी किया जा सकता है, बजाय इसके कि एक को चालू और बंद किया जाए। जैसे ही लीवर हिलता है, यह एक आउटपुट सर्किट को पूरा करने से दूसरे आउटपुट सर्किट को पूरा करने के लिए स्विच करता है, आमतौर पर एक सामान्य पावर कनेक्शन या सामान्य ग्राउंड कनेक्शन साझा करता है। + +✅ कुछ शोध करें: रिले के कई प्रकार होते हैं, जिनमें अंतर यह होता है कि क्या नियंत्रण सर्किट पावर लागू होने पर रिले को चालू या बंद करता है, या कई आउटपुट सर्किट होते हैं। इन विभिन्न प्रकारों के बारे में जानें। + +जब लीवर हिलता है, तो आप आमतौर पर इसे इलेक्ट्रोमैग्नेट के संपर्क में आने पर एक स्पष्ट क्लिक की आवाज सुन सकते हैं। + +> 💁 एक रिले को इस तरह से वायर किया जा सकता है कि कनेक्शन बनाना वास्तव में रिले को पावर काट देता है, जिससे रिले बंद हो जाता है, जो फिर रिले को पावर भेजता है और इसे फिर से चालू करता है, और इसी तरह। इसका मतलब है कि रिले बहुत तेज़ी से क्लिक करेगा और एक बजने वाली आवाज़ बनाएगा। यह कुछ पहले के बजर्स के काम करने का तरीका था, जो इलेक्ट्रिक डोरबेल्स में उपयोग किए जाते थे। + +### रिले पावर + +इलेक्ट्रोमैग्नेट को सक्रिय करने और लीवर को खींचने के लिए बहुत अधिक पावर की आवश्यकता नहीं होती है, इसे 3.3V या 5V आउटपुट का उपयोग करके IoT डिवाइस से नियंत्रित किया जा सकता है। आउटपुट सर्किट बहुत अधिक पावर ले जा सकता है, रिले के आधार पर, जिसमें मुख्य वोल्टेज या यहां तक कि औद्योगिक उपयोग के लिए उच्च पावर स्तर शामिल हैं। इस तरह एक IoT डिवाइस एक सिंचाई प्रणाली को नियंत्रित कर सकता है, एक छोटे पौधे के लिए एक छोटे पंप से लेकर एक पूरे वाणिज्यिक खेत के लिए एक विशाल औद्योगिक प्रणाली तक। + +![एक ग्रोव रिले जिसमें नियंत्रण सर्किट, आउटपुट सर्किट और रिले लेबल किए गए हैं](../../../../../translated_images/grove-relay-labelled.293e068f5c3c2a199bd7892f2661fdc9e10c920b535cfed317fbd6d1d4ae1168.hi.png) + +ऊपर दी गई छवि एक ग्रोव रिले दिखाती है। नियंत्रण सर्किट IoT डिवाइस से जुड़ता है और 3.3V या 5V का उपयोग करके रिले को चालू या बंद करता है। आउटपुट सर्किट में दो टर्मिनल होते हैं, जिनमें से कोई भी पावर या ग्राउंड हो सकता है। आउटपुट सर्किट 250V तक 10A संभाल सकता है, जो कई मुख्य पावर वाले उपकरणों के लिए पर्याप्त है। आप ऐसे रिले प्राप्त कर सकते हैं जो और भी उच्च पावर स्तर संभाल सकते हैं। + +![एक पंप को रिले के माध्यम से वायर किया गया](../../../../../translated_images/pump-wired-to-relay.66c5cfc0d89189900cd601777f5caeb39ee35c6250f6c86bf38feaceedb21fe9.hi.png) + +ऊपर दी गई छवि में, एक पंप को रिले के माध्यम से पावर दी जाती है। एक लाल तार USB पावर सप्लाई के +5V टर्मिनल को रिले के आउटपुट सर्किट के एक टर्मिनल से जोड़ता है, और दूसरा लाल तार आउटपुट सर्किट के दूसरे टर्मिनल को पंप से जोड़ता है। एक काला तार पंप को USB पावर सप्लाई के ग्राउंड से जोड़ता है। जब रिले चालू होता है, तो यह सर्किट को पूरा करता है, पंप को 5V भेजता है, और पंप चालू हो जाता है। + +## रिले को नियंत्रित करना + +आप अपने IoT डिवाइस से एक रिले को नियंत्रित कर सकते हैं। + +### कार्य - रिले को नियंत्रित करें + +अपने IoT डिवाइस का उपयोग करके रिले को नियंत्रित करने के लिए संबंधित गाइड का पालन करें: + +* [Arduino - Wio Terminal](wio-terminal-relay.md) +* [सिंगल-बोर्ड कंप्यूटर - Raspberry Pi](pi-relay.md) +* [सिंगल-बोर्ड कंप्यूटर - वर्चुअल डिवाइस](virtual-device-relay.md) + +## MQTT के माध्यम से अपने पौधे को नियंत्रित करें + +अब तक आपका रिले सीधे IoT डिवाइस द्वारा एकल मिट्टी नमी रीडिंग के आधार पर नियंत्रित किया जा रहा था। एक वाणिज्यिक सिंचाई प्रणाली में, नियंत्रण लॉजिक केंद्रीकृत होगा, जिससे यह कई सेंसरों से डेटा का उपयोग करके पानी देने के निर्णय ले सके, और किसी भी कॉन्फ़िगरेशन को एक ही स्थान पर बदला जा सके। इसे अनुकरण करने के लिए, आप MQTT के माध्यम से रिले को नियंत्रित कर सकते हैं। + +### कार्य - MQTT के माध्यम से रिले को नियंत्रित करें + +1. अपने `soil-moisture-sensor` प्रोजेक्ट में MQTT से कनेक्ट करने के लिए संबंधित MQTT लाइब्रेरी/पाइप पैकेज और कोड जोड़ें। क्लाइंट ID को `soilmoisturesensor_client` के रूप में नाम दें, जिसे आपके ID से प्रीफिक्स किया गया हो। + + > ⚠️ यदि आवश्यक हो, तो [प्रोजेक्ट 1, पाठ 4 में MQTT से कनेक्ट करने के निर्देश](../../../1-getting-started/lessons/4-connect-internet/README.md#connect-your-iot-device-to-mqtt) देखें। + +1. मिट्टी की नमी सेटिंग्स के साथ टेलीमेट्री भेजने के लिए संबंधित डिवाइस कोड जोड़ें। टेलीमेट्री संदेश के लिए, प्रॉपर्टी का नाम `soil_moisture` रखें। + + > ⚠️ यदि आवश्यक हो, तो [प्रोजेक्ट 1, पाठ 4 में MQTT को टेलीमेट्री भेजने के निर्देश](../../../1-getting-started/lessons/4-connect-internet/README.md#send-telemetry-from-your-iot-device) देखें। + +1. `soil-moisture-sensor-server` नामक एक फोल्डर में टेलीमेट्री की सदस्यता लेने और रिले को नियंत्रित करने के लिए एक कमांड भेजने के लिए कुछ स्थानीय सर्वर कोड बनाएं। कमांड संदेश में प्रॉपर्टी का नाम `relay_on` रखें, और क्लाइंट ID को `soilmoisturesensor_server` के रूप में नाम दें, जिसे आपके ID से प्रीफिक्स किया गया हो। इस कोड को उसी संरचना में रखें जैसा आपने प्रोजेक्ट 1, पाठ 4 के लिए लिखा था, क्योंकि आप इस पाठ में इस कोड में और जोड़ेंगे। + + > ⚠️ यदि आवश्यक हो, तो [MQTT को टेलीमेट्री भेजने के निर्देश](../../../1-getting-started/lessons/4-connect-internet/README.md#write-the-server-code) और [MQTT के माध्यम से कमांड भेजने के निर्देश](../../../1-getting-started/lessons/4-connect-internet/README.md#send-commands-to-the-mqtt-broker) प्रोजेक्ट 1, पाठ 4 में देखें। + +1. प्राप्त कमांड से रिले को नियंत्रित करने के लिए संबंधित डिवाइस कोड जोड़ें, संदेश से `relay_on` प्रॉपर्टी का उपयोग करें। यदि `soil_moisture` 450 से अधिक है तो `relay_on` के लिए true भेजें, अन्यथा false भेजें, जैसा कि आपने पहले IoT डिवाइस के लिए लॉजिक जोड़ा था। + + > ⚠️ यदि आवश्यक हो, तो [MQTT से कमांड का जवाब देने के निर्देश](../../../1-getting-started/lessons/4-connect-internet/README.md#handle-commands-on-the-iot-device) प्रोजेक्ट 1, पाठ 4 में देखें। + +> 💁 आप इस कोड को [code-mqtt](../../../../../2-farm/lessons/3-automated-plant-watering/code-mqtt) फोल्डर में पा सकते हैं। + +सुनिश्चित करें कि कोड आपके डिवाइस और स्थानीय सर्वर पर चल रहा है, और इसे मिट्टी की नमी के स्तर को बदलकर आज़माएं, चाहे वर्चुअल सेंसर द्वारा भेजे गए मानों को बदलकर, या मिट्टी में पानी जोड़कर या सेंसर को मिट्टी से हटाकर। + +## सेंसर और एक्ट्यूएटर का समय + +पाठ 3 में आपने एक नाइटलाइट बनाया था - एक LED जो जैसे ही एक लाइट सेंसर द्वारा कम रोशनी का स्तर पता चलता है, चालू हो जाती है। लाइट सेंसर तुरंत रोशनी के स्तर में बदलाव का पता लगाता है, और डिवाइस जल्दी प्रतिक्रिया कर सकता है, केवल `loop` फ़ंक्शन या `while True:` लूप में देरी की लंबाई तक सीमित। एक IoT डेवलपर के रूप में, आप हमेशा इतनी तेज़ प्रतिक्रिया लूप पर भरोसा नहीं कर सकते। + +### मिट्टी की नमी के लिए समय + +यदि आपने पिछले पाठ में भौतिक सेंसर का उपयोग करके मिट्टी की नमी पर काम किया, तो आपने देखा होगा कि पौधे को पानी देने के बाद मिट्टी की नमी रीडिंग को गिरने में कुछ सेकंड लगते हैं। ऐसा इसलिए नहीं है क्योंकि सेंसर धीमा है, बल्कि इसलिए कि पानी को मिट्टी में सोखने में समय लगता है। +💁 अगर आपने सेंसर के बहुत पास पानी डाला होगा, तो आपने देखा होगा कि रीडिंग तेजी से गिरी और फिर वापस बढ़ गई - ऐसा इसलिए होता है क्योंकि सेंसर के पास का पानी मिट्टी के बाकी हिस्सों में फैल जाता है, जिससे सेंसर के पास की मिट्टी की नमी कम हो जाती है। +![पानी देने के दौरान मिट्टी की नमी का माप 658 पर स्थिर रहता है, यह केवल पानी देने के बाद 320 तक गिरता है जब पानी मिट्टी में पूरी तरह से समा जाता है](../../../../../translated_images/soil-moisture-travel.a0e31af222cf14385de5380dfc32c7b8213960965228b8e4f7b7ab7f73b310a3.hi.png) + +ऊपर दिए गए चित्र में, मिट्टी की नमी का माप 658 दिखाता है। पौधे को पानी दिया जाता है, लेकिन यह माप तुरंत नहीं बदलता क्योंकि पानी अभी तक सेंसर तक नहीं पहुंचा है। पानी देने की प्रक्रिया सेंसर तक पानी पहुंचने से पहले ही समाप्त हो सकती है, और तब माप नई नमी के स्तर को दर्शाने के लिए गिरता है। + +यदि आप मिट्टी की नमी के स्तर के आधार पर रिले के माध्यम से सिंचाई प्रणाली को नियंत्रित करने के लिए कोड लिख रहे हैं, तो आपको इस देरी को ध्यान में रखना होगा और अपने IoT डिवाइस में अधिक स्मार्ट टाइमिंग बनानी होगी। + +✅ एक पल रुककर सोचें कि आप इसे कैसे कर सकते हैं। + +### सेंसर और एक्टुएटर की टाइमिंग को नियंत्रित करें + +कल्पना करें कि आपको एक खेत के लिए सिंचाई प्रणाली बनाने का काम सौंपा गया है। मिट्टी के प्रकार के आधार पर, उगाए गए पौधों के लिए आदर्श मिट्टी की नमी का स्तर 400-450 के एनालॉग वोल्टेज माप से मेल खाता है। + +आप डिवाइस को उसी तरह प्रोग्राम कर सकते हैं जैसे नाइटलाइट - जब तक सेंसर 450 से ऊपर पढ़ता है, रिले को चालू करें ताकि पंप चालू हो जाए। समस्या यह है कि पंप से पानी मिट्टी के माध्यम से सेंसर तक पहुंचने में समय लेता है। सेंसर पानी को तब रोक देगा जब वह 450 का स्तर मापेगा, लेकिन पानी का स्तर तब भी गिरता रहेगा क्योंकि पंप किया गया पानी मिट्टी में समा रहा है। इसका परिणाम पानी की बर्बादी और जड़ों को नुकसान का खतरा हो सकता है। + +✅ याद रखें - बहुत अधिक पानी पौधों के लिए उतना ही खराब हो सकता है जितना कि बहुत कम पानी, और यह एक कीमती संसाधन की बर्बादी है। + +बेहतर समाधान यह समझना है कि एक्टुएटर के चालू होने और सेंसर द्वारा पढ़े गए गुण में बदलाव के बीच एक देरी होती है। इसका मतलब है कि सेंसर को न केवल कुछ समय इंतजार करना चाहिए बल्कि एक्टुएटर को अगली सेंसर माप लेने से पहले कुछ समय के लिए बंद रहना चाहिए। + +हर बार रिले कितनी देर तक चालू रहना चाहिए? यह बेहतर है कि सावधानी बरती जाए और रिले को केवल थोड़े समय के लिए चालू किया जाए, फिर पानी को मिट्टी में समाने के लिए इंतजार किया जाए, फिर नमी के स्तर को फिर से जांचा जाए। आखिरकार, आप हमेशा अधिक पानी जोड़ने के लिए पंप को फिर से चालू कर सकते हैं, लेकिन मिट्टी से पानी निकाल नहीं सकते। + +> 💁 इस प्रकार की टाइमिंग नियंत्रण आपके IoT डिवाइस, मापे जा रहे गुण, और उपयोग किए गए सेंसर और एक्टुएटर पर बहुत निर्भर करता है। + +![एक स्ट्रॉबेरी पौधा जो पंप के माध्यम से पानी से जुड़ा है, पंप एक रिले से जुड़ा है। रिले और मिट्टी की नमी सेंसर दोनों एक रास्पबेरी पाई से जुड़े हैं](../../../../../translated_images/strawberry-with-pump.b410fc72ac6aabad3e28de9775bf2393ead73dcfec6fd8c9bc01cf107ecd171a.hi.png) + +उदाहरण के लिए, मेरे पास एक स्ट्रॉबेरी पौधा है जिसमें मिट्टी की नमी सेंसर और एक पंप है जो रिले द्वारा नियंत्रित होता है। मैंने देखा है कि जब मैं पानी जोड़ता हूं तो मिट्टी की नमी का माप स्थिर होने में लगभग 20 सेकंड लगते हैं। इसका मतलब है कि मुझे रिले को बंद करना होगा और नमी के स्तर की जांच करने से पहले 20 सेकंड इंतजार करना होगा। मैं कम पानी रखना पसंद करूंगा क्योंकि मैं हमेशा पंप को फिर से चालू कर सकता हूं, लेकिन मैं पौधे से पानी नहीं निकाल सकता। + +![चरण 1, माप लें। चरण 2, पानी जोड़ें। चरण 3, पानी को मिट्टी में समाने के लिए इंतजार करें। चरण 4, माप को फिर से लें](../../../../../translated_images/soil-moisture-delay.865f3fae206db01d5f8f100f4f44040215d44a0412dd3450aef7ff7b93b6d273.hi.png) + +इसका मतलब है कि सबसे अच्छा प्रक्रिया कुछ इस प्रकार होगी: + +* पंप को 5 सेकंड के लिए चालू करें +* 20 सेकंड इंतजार करें +* मिट्टी की नमी की जांच करें +* यदि स्तर अभी भी आवश्यक स्तर से ऊपर है, तो ऊपर दिए गए चरणों को दोहराएं + +5 सेकंड पंप के लिए बहुत लंबा हो सकता है, खासकर यदि नमी का स्तर केवल आवश्यक स्तर से थोड़ा ऊपर हो। सबसे अच्छा तरीका यह है कि इसे आजमाएं, फिर सेंसर डेटा के साथ समायोजित करें, एक निरंतर फीडबैक लूप के साथ। यह अधिक सूक्ष्म टाइमिंग की ओर भी ले जा सकता है, जैसे कि आवश्यक मिट्टी की नमी से हर 100 ऊपर के लिए पंप को 1 सेकंड के लिए चालू करना, बजाय एक निश्चित 5 सेकंड के। + +✅ कुछ शोध करें: क्या अन्य टाइमिंग विचार हैं? क्या पौधे को किसी भी समय पानी दिया जा सकता है जब मिट्टी की नमी बहुत कम हो, या पौधों को पानी देने के लिए दिन के कुछ विशेष समय अच्छे या खराब होते हैं? + +> 💁 मौसम की भविष्यवाणी को भी बाहरी खेती के लिए स्वचालित सिंचाई प्रणालियों को नियंत्रित करते समय ध्यान में रखा जा सकता है। यदि बारिश की संभावना है, तो पानी देने को बारिश खत्म होने तक रोक दिया जा सकता है। उस समय मिट्टी इतनी नम हो सकती है कि उसे पानी देने की आवश्यकता न हो, जो पानी की बर्बादी से बचने के लिए अधिक कुशल है। + +## अपने पौधे नियंत्रण सर्वर में टाइमिंग जोड़ें + +सर्वर कोड को पानी देने के चक्र के आसपास नियंत्रण जोड़ने और मिट्टी की नमी के स्तर को बदलने के लिए इंतजार करने के लिए संशोधित किया जा सकता है। रिले टाइमिंग को नियंत्रित करने के लिए सर्वर लॉजिक है: + +1. टेलीमेट्री संदेश प्राप्त हुआ +1. मिट्टी की नमी का स्तर जांचें +1. यदि यह ठीक है, तो कुछ न करें। यदि माप बहुत अधिक है (जिसका अर्थ है कि मिट्टी की नमी बहुत कम है) तो: + 1. रिले को चालू करने के लिए एक कमांड भेजें + 1. 5 सेकंड इंतजार करें + 1. रिले को बंद करने के लिए एक कमांड भेजें + 1. मिट्टी की नमी के स्तर को स्थिर होने के लिए 20 सेकंड इंतजार करें + +पानी देने का चक्र, टेलीमेट्री संदेश प्राप्त करने से लेकर मिट्टी की नमी के स्तर को फिर से जांचने के लिए तैयार होने तक, लगभग 25 सेकंड लेता है। हम हर 10 सेकंड में मिट्टी की नमी के स्तर भेज रहे हैं, इसलिए एक ओवरलैप है जहां एक संदेश प्राप्त होता है जबकि सर्वर मिट्टी की नमी के स्तर को स्थिर होने के लिए इंतजार कर रहा है, जो एक और पानी देने का चक्र शुरू कर सकता है। + +इससे निपटने के लिए दो विकल्प हैं: + +* IoT डिवाइस कोड को बदलें ताकि टेलीमेट्री केवल हर मिनट भेजी जाए, इस तरह पानी देने का चक्र अगले संदेश भेजे जाने से पहले पूरा हो जाएगा +* पानी देने के चक्र के दौरान टेलीमेट्री से अनसब्सक्राइब करें + +पहला विकल्प बड़े खेतों के लिए हमेशा अच्छा समाधान नहीं होता। किसान मिट्टी की नमी के स्तर को पानी देने के दौरान कैप्चर करना चाह सकता है ताकि बाद में विश्लेषण के लिए इसका उपयोग किया जा सके, उदाहरण के लिए खेत के विभिन्न क्षेत्रों में पानी के प्रवाह के बारे में जागरूक होने के लिए अधिक लक्षित पानी देने का मार्गदर्शन करने के लिए। दूसरा विकल्प बेहतर है - कोड केवल टेलीमेट्री को तब अनदेखा कर रहा है जब इसका उपयोग नहीं किया जा सकता, लेकिन टेलीमेट्री अभी भी अन्य सेवाओं के लिए उपलब्ध है जो इसे सब्सक्राइब कर सकती हैं। + +> 💁 IoT डेटा केवल एक डिवाइस से एक सेवा तक नहीं भेजा जाता, बल्कि कई डिवाइस डेटा को एक ब्रॉकर पर भेज सकते हैं, और कई सेवाएं ब्रॉकर से डेटा सुन सकती हैं। उदाहरण के लिए, एक सेवा मिट्टी की नमी डेटा को सुन सकती है और इसे बाद में विश्लेषण के लिए एक डेटाबेस में स्टोर कर सकती है। एक अन्य सेवा भी उसी टेलीमेट्री को सुन सकती है ताकि सिंचाई प्रणाली को नियंत्रित किया जा सके। + +### कार्य - अपने पौधे नियंत्रण सर्वर में टाइमिंग जोड़ें + +अपने सर्वर कोड को 5 सेकंड के लिए रिले चलाने, फिर 20 सेकंड इंतजार करने के लिए अपडेट करें। + +1. यदि `soil-moisture-sensor-server` फ़ोल्डर VS Code में पहले से खुला नहीं है, तो इसे खोलें। सुनिश्चित करें कि वर्चुअल एनवायरनमेंट सक्रिय है। + +1. `app.py` फ़ाइल खोलें + +1. मौजूदा इम्पोर्ट्स के नीचे `app.py` फ़ाइल में निम्नलिखित कोड जोड़ें: + + ```python + import threading + ``` + + यह कथन Python लाइब्रेरी से `threading` को इम्पोर्ट करता है, जो Python को इंतजार करते समय अन्य कोड निष्पादित करने की अनुमति देता है। + +1. उस कोड के नीचे, जो टेलीमेट्री संदेशों को संभालता है, निम्नलिखित कोड जोड़ें: + + ```python + water_time = 5 + wait_time = 20 + ``` + + यह परिभाषित करता है कि रिले को कितनी देर तक चलाना है (`water_time`), और उसके बाद मिट्टी की नमी की जांच करने के लिए कितनी देर तक इंतजार करना है (`wait_time`)। + +1. इस कोड के नीचे, निम्नलिखित जोड़ें: + + ```python + def send_relay_command(client, state): + command = { 'relay_on' : state } + print("Sending message:", command) + client.publish(server_command_topic, json.dumps(command)) + ``` + + यह एक फ़ंक्शन को परिभाषित करता है जिसे `send_relay_command` कहा जाता है, जो MQTT के माध्यम से रिले को नियंत्रित करने के लिए एक कमांड भेजता है। टेलीमेट्री को एक डिक्शनरी के रूप में बनाया जाता है, फिर JSON स्ट्रिंग में परिवर्तित किया जाता है। `state` में पास की गई वैल्यू निर्धारित करती है कि रिले चालू या बंद होना चाहिए। + +1. `send_relay_code` फ़ंक्शन के बाद, निम्नलिखित कोड जोड़ें: + + ```python + def control_relay(client): + print("Unsubscribing from telemetry") + mqtt_client.unsubscribe(client_telemetry_topic) + + send_relay_command(client, True) + time.sleep(water_time) + send_relay_command(client, False) + + time.sleep(wait_time) + + print("Subscribing to telemetry") + mqtt_client.subscribe(client_telemetry_topic) + ``` + + यह एक फ़ंक्शन को परिभाषित करता है जो आवश्यक टाइमिंग के आधार पर रिले को नियंत्रित करता है। यह टेलीमेट्री से अनसब्सक्राइब करके शुरू होता है ताकि पानी देने के दौरान मिट्टी की नमी संदेशों को प्रोसेस न किया जाए। फिर यह रिले को चालू करने के लिए एक कमांड भेजता है। इसके बाद यह `water_time` के लिए इंतजार करता है और फिर रिले को बंद करने के लिए एक कमांड भेजता है। अंत में यह मिट्टी की नमी के स्तर को स्थिर होने के लिए `wait_time` सेकंड तक इंतजार करता है। फिर यह टेलीमेट्री को फिर से सब्सक्राइब करता है। + +1. `handle_telemetry` फ़ंक्शन को निम्नलिखित में बदलें: + + ```python + def handle_telemetry(client, userdata, message): + payload = json.loads(message.payload.decode()) + print("Message received:", payload) + + if payload['soil_moisture'] > 450: + threading.Thread(target=control_relay, args=(client,)).start() + ``` + + यह कोड मिट्टी की नमी के स्तर की जांच करता है। यदि यह 450 से अधिक है, तो मिट्टी को पानी देने की आवश्यकता है, इसलिए यह `control_relay` फ़ंक्शन को कॉल करता है। यह फ़ंक्शन एक अलग थ्रेड पर चलता है, जो बैकग्राउंड में चलता है। + +1. सुनिश्चित करें कि आपका IoT डिवाइस चल रहा है, फिर इस कोड को चलाएं। मिट्टी की नमी के स्तर को बदलें और देखें कि रिले के साथ क्या होता है - इसे 5 सेकंड के लिए चालू होना चाहिए और कम से कम 20 सेकंड तक बंद रहना चाहिए, केवल तभी चालू होना चाहिए जब मिट्टी की नमी का स्तर पर्याप्त न हो। + + ```output + (.venv) ➜ soil-moisture-sensor-server ✗ python app.py + Message received: {'soil_moisture': 457} + Unsubscribing from telemetry + Sending message: {'relay_on': True} + Sending message: {'relay_on': False} + Subscribing to telemetry + Message received: {'soil_moisture': 302} + ``` + + एक सिम्युलेटेड सिंचाई प्रणाली में इसका परीक्षण करने का अच्छा तरीका यह है कि सूखी मिट्टी का उपयोग करें, फिर रिले चालू होने पर मैन्युअल रूप से पानी डालें, और रिले बंद होने पर पानी डालना बंद करें। + +> 💁 आप इस कोड को [code-timing](../../../../../2-farm/lessons/3-automated-plant-watering/code-timing) फ़ोल्डर में पा सकते हैं। + +> 💁 यदि आप एक वास्तविक सिंचाई प्रणाली बनाने के लिए पंप का उपयोग करना चाहते हैं, तो आप [6V पानी पंप](https://www.seeedstudio.com/6V-Mini-Water-Pump-p-1945.html) का उपयोग कर सकते हैं और इसे [USB टर्मिनल पावर सप्लाई](https://www.adafruit.com/product/3628) के साथ जोड़ सकते हैं। सुनिश्चित करें कि पंप को या पंप से बिजली रिले के माध्यम से जुड़ी हो। + +--- + +## 🚀 चुनौती + +क्या आप किसी अन्य IoT या अन्य इलेक्ट्रिकल डिवाइस के बारे में सोच सकते हैं जिसमें ऐसा ही समस्या हो, जहां एक्टुएटर के परिणाम सेंसर तक पहुंचने में समय लगता है। आपके घर या स्कूल में शायद कुछ ऐसे डिवाइस हों। + +* वे कौन से गुण मापते हैं? +* एक्टुएटर के उपयोग के बाद गुण बदलने में कितना समय लगता है? +* क्या यह ठीक है कि गुण आवश्यक मान से आगे बढ़ जाए? +* यदि आवश्यक हो तो इसे वापस आवश्यक मान पर कैसे लाया जा सकता है? + +## पोस्ट-लेक्चर क्विज़ + +[पोस्ट-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/14) + +## समीक्षा और स्व-अध्ययन + +* रिले के बारे में अधिक पढ़ें, जिसमें टेलीफोन एक्सचेंज में उनका ऐतिहासिक उपयोग शामिल है, [रिले विकिपीडिया पेज](https://wikipedia.org/wiki/Relay) पर। + +## असाइनमेंट + +[एक अधिक कुशल पानी देने का चक्र बनाएं](assignment.md) + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/3-automated-plant-watering/assignment.md b/translations/hi/2-farm/lessons/3-automated-plant-watering/assignment.md new file mode 100644 index 00000000..bde2b92a --- /dev/null +++ b/translations/hi/2-farm/lessons/3-automated-plant-watering/assignment.md @@ -0,0 +1,52 @@ + +# एक अधिक प्रभावी सिंचाई चक्र बनाएं + +## निर्देश + +इस पाठ में आपने सीखा कि सेंसर डेटा के माध्यम से एक रिले को कैसे नियंत्रित किया जाए, और वह रिले बदले में सिंचाई प्रणाली के लिए एक पंप को नियंत्रित कर सकता है। मिट्टी के एक निश्चित क्षेत्र के लिए, एक निश्चित समय तक पंप चलाने का मिट्टी की नमी पर हमेशा समान प्रभाव पड़ेगा। इसका मतलब है कि आप यह अंदाजा लगा सकते हैं कि मिट्टी की नमी में एक निश्चित गिरावट के लिए कितने सेकंड की सिंचाई की आवश्यकता है। इस डेटा का उपयोग करके आप एक अधिक नियंत्रित सिंचाई प्रणाली बना सकते हैं। + +इस असाइनमेंट में, आपको यह गणना करनी होगी कि मिट्टी की नमी में एक विशेष वृद्धि के लिए पंप कितनी देर तक चलना चाहिए। + +> ⚠️ यदि आप वर्चुअल IoT हार्डवेयर का उपयोग कर रहे हैं, तो आप इस प्रक्रिया को पूरा कर सकते हैं, लेकिन परिणामों को मैन्युअल रूप से मिट्टी की नमी के रीडिंग को प्रति सेकंड एक निश्चित मात्रा से बढ़ाकर अनुकरण करें जब रिले चालू हो। + +1. सूखी मिट्टी से शुरू करें। मिट्टी की नमी को मापें। + +1. एक निश्चित मात्रा में पानी डालें, या तो पंप को 1 सेकंड के लिए चलाकर या एक निश्चित मात्रा में पानी डालकर। + + > पंप हमेशा एक स्थिर दर पर चलना चाहिए, इसलिए हर सेकंड जब पंप चलता है, तो वह समान मात्रा में पानी प्रदान करेगा। + +1. तब तक प्रतीक्षा करें जब तक मिट्टी की नमी का स्तर स्थिर न हो जाए और एक रीडिंग लें। + +1. इसे कई बार दोहराएं और परिणामों की एक तालिका बनाएं। नीचे इस तालिका का एक उदाहरण दिया गया है। + + | कुल पंप समय | मिट्टी की नमी | गिरावट | + | --- | --: | -: | + | सूखी | 643 | 0 | + | 1 सेकंड | 621 | 22 | + | 2 सेकंड | 601 | 20 | + | 3 सेकंड | 579 | 22 | + | 4 सेकंड | 560 | 19 | + | 5 सेकंड | 539 | 21 | + | 6 सेकंड | 521 | 18 | + +1. पानी के प्रति सेकंड मिट्टी की नमी में औसत वृद्धि का पता लगाएं। ऊपर दिए गए उदाहरण में, पानी के प्रत्येक सेकंड में रीडिंग औसतन 20.3 से घट जाती है। + +1. इस डेटा का उपयोग अपने सर्वर कोड की दक्षता बढ़ाने के लिए करें, पंप को आवश्यक समय तक चलाएं ताकि मिट्टी की नमी वांछित स्तर तक पहुंच सके। + +## मूल्यांकन मानदंड + +| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | +| -------- | --------- | -------- | ----------------- | +| मिट्टी की नमी डेटा कैप्चर करें | पानी की निश्चित मात्रा डालने के बाद कई रीडिंग कैप्चर करने में सक्षम है | पानी की निश्चित मात्रा के साथ कुछ रीडिंग कैप्चर करने में सक्षम है | केवल एक या दो रीडिंग कैप्चर कर सकता है, या पानी की निश्चित मात्रा का उपयोग करने में असमर्थ है | +| सर्वर कोड को कैलिब्रेट करें | मिट्टी की नमी रीडिंग में औसत गिरावट की गणना करने और सर्वर कोड को अपडेट करने में सक्षम है | औसत गिरावट की गणना करने में सक्षम है, लेकिन सर्वर कोड को अपडेट नहीं कर सकता, या औसत को सही ढंग से गणना करने में असमर्थ है, लेकिन इस मान को सही ढंग से सर्वर कोड अपडेट करने के लिए उपयोग करता है | औसत की गणना करने या सर्वर कोड को अपडेट करने में असमर्थ है | + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/3-automated-plant-watering/pi-relay.md b/translations/hi/2-farm/lessons/3-automated-plant-watering/pi-relay.md new file mode 100644 index 00000000..ef71b235 --- /dev/null +++ b/translations/hi/2-farm/lessons/3-automated-plant-watering/pi-relay.md @@ -0,0 +1,121 @@ + +# रिले को नियंत्रित करें - रास्पबेरी पाई + +इस पाठ के इस भाग में, आप अपनी रास्पबेरी पाई में मिट्टी की नमी सेंसर के साथ एक रिले जोड़ेंगे और इसे मिट्टी की नमी के स्तर के आधार पर नियंत्रित करेंगे। + +## हार्डवेयर + +रास्पबेरी पाई को एक रिले की आवश्यकता है। + +आप जो रिले उपयोग करेंगे वह [Grove relay](https://www.seeedstudio.com/Grove-Relay.html) है, जो एक सामान्यतः-खुला रिले है (जिसका मतलब है कि जब रिले को कोई सिग्नल नहीं भेजा जाता है, तो आउटपुट सर्किट खुला या डिस्कनेक्टेड रहता है)। यह 250V और 10A तक के आउटपुट सर्किट को संभाल सकता है। + +यह एक डिजिटल एक्टुएटर है, इसलिए इसे Grove Base Hat के डिजिटल पिन से जोड़ा जाता है। + +### रिले को कनेक्ट करें + +Grove रिले को रास्पबेरी पाई से जोड़ा जा सकता है। + +#### कार्य + +रिले को कनेक्ट करें। + +![एक Grove रिले](../../../../../translated_images/grove-relay.d426958ca210fbd0fb7983d7edc069d46c73a8b0a099d94797bd756f7b6bb6be.hi.png) + +1. Grove केबल के एक सिरे को रिले के सॉकेट में डालें। यह केवल एक ही दिशा में जाएगा। + +1. रास्पबेरी पाई को बंद करके, Grove केबल के दूसरे सिरे को Grove Base Hat पर **D5** नामक डिजिटल सॉकेट में कनेक्ट करें। यह सॉकेट GPIO पिन के पास वाले सॉकेट की पंक्ति में बाईं ओर से दूसरा है। मिट्टी की नमी सेंसर को **A0** सॉकेट में कनेक्टेड रहने दें। + +![Grove रिले D5 सॉकेट से कनेक्टेड और मिट्टी की नमी सेंसर A0 सॉकेट से कनेक्टेड](../../../../../translated_images/pi-relay-and-soil-moisture-sensor.02f3198975b8c53e69ec716cd2719ce117700bd1fc933eaf93476c103c57939b.hi.png) + +1. मिट्टी की नमी सेंसर को मिट्टी में डालें, अगर यह पहले से पिछले पाठ से मिट्टी में नहीं है। + +## रिले को प्रोग्राम करें + +अब रास्पबेरी पाई को जुड़े हुए रिले का उपयोग करने के लिए प्रोग्राम किया जा सकता है। + +### कार्य + +डिवाइस को प्रोग्राम करें। + +1. पाई को चालू करें और इसे बूट होने दें। + +1. पिछले पाठ से `soil-moisture-sensor` प्रोजेक्ट को VS Code में खोलें, अगर यह पहले से खुला नहीं है। आप इस प्रोजेक्ट में कोड जोड़ेंगे। + +1. `app.py` फाइल में मौजूदा इंपोर्ट्स के नीचे निम्नलिखित कोड जोड़ें: + + ```python + from grove.grove_relay import GroveRelay + ``` + + यह स्टेटमेंट Grove Python लाइब्रेरी से `GroveRelay` को इंपोर्ट करता है ताकि Grove रिले के साथ इंटरैक्ट किया जा सके। + +1. `ADC` क्लास की घोषणा के नीचे निम्नलिखित कोड जोड़ें ताकि `GroveRelay` का एक इंस्टेंस बनाया जा सके: + + ```python + relay = GroveRelay(5) + ``` + + यह **D5** पिन का उपयोग करके एक रिले बनाता है, जो वह डिजिटल पिन है जिससे आपने रिले को कनेक्ट किया है। + +1. यह जांचने के लिए कि रिले काम कर रहा है, `while True:` लूप में निम्नलिखित कोड जोड़ें: + + ```python + relay.on() + time.sleep(.5) + relay.off() + ``` + + यह कोड रिले को चालू करता है, 0.5 सेकंड तक इंतजार करता है, फिर रिले को बंद कर देता है। + +1. Python ऐप चलाएं। रिले हर 10 सेकंड में चालू और बंद होगा, चालू और बंद होने के बीच आधे सेकंड की देरी के साथ। आप रिले को क्लिक करते हुए सुनेंगे जब यह चालू और बंद होगा। जब रिले चालू होगा, तो Grove बोर्ड पर एक LED जलेगी और जब रिले बंद होगा, तो वह बुझ जाएगी। + + ![रिले चालू और बंद हो रहा है](../../../../../images/relay-turn-on-off.gif) + +## मिट्टी की नमी से रिले को नियंत्रित करें + +अब जब रिले काम कर रहा है, इसे मिट्टी की नमी के रीडिंग के अनुसार नियंत्रित किया जा सकता है। + +### कार्य + +रिले को नियंत्रित करें। + +1. रिले को टेस्ट करने के लिए जोड़े गए 3 लाइनों के कोड को हटा दें। उनकी जगह निम्नलिखित कोड जोड़ें: + + ```python + if soil_moisture > 450: + print("Soil Moisture is too low, turning relay on.") + relay.on() + else: + print("Soil Moisture is ok, turning relay off.") + relay.off() + ``` + + यह कोड मिट्टी की नमी सेंसर से मिट्टी की नमी का स्तर जांचता है। अगर यह 450 से ऊपर है, तो रिले चालू करता है, और जब यह 450 से नीचे जाता है, तो रिले बंद करता है। + + > 💁 याद रखें कि कैपेसिटिव मिट्टी की नमी सेंसर जितना कम रीड करता है, मिट्टी में उतनी ही अधिक नमी होती है और इसके विपरीत। + +1. Python ऐप चलाएं। आप देखेंगे कि रिले मिट्टी की नमी के स्तर के अनुसार चालू या बंद होता है। इसे सूखी मिट्टी में आज़माएं, फिर पानी डालें। + + ```output + Soil Moisture: 638 + Soil Moisture is too low, turning relay on. + Soil Moisture: 452 + Soil Moisture is too low, turning relay on. + Soil Moisture: 347 + Soil Moisture is ok, turning relay off. + ``` + +> 💁 आप इस कोड को [code-relay/pi](../../../../../2-farm/lessons/3-automated-plant-watering/code-relay/pi) फोल्डर में पा सकते हैं। + +😀 आपका मिट्टी की नमी सेंसर द्वारा रिले को नियंत्रित करने वाला प्रोग्राम सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/3-automated-plant-watering/virtual-device-relay.md b/translations/hi/2-farm/lessons/3-automated-plant-watering/virtual-device-relay.md new file mode 100644 index 00000000..a379c3eb --- /dev/null +++ b/translations/hi/2-farm/lessons/3-automated-plant-watering/virtual-device-relay.md @@ -0,0 +1,125 @@ + +# रिले को नियंत्रित करें - वर्चुअल IoT हार्डवेयर + +इस पाठ के इस भाग में, आप अपनी वर्चुअल IoT डिवाइस में मिट्टी की नमी सेंसर के साथ एक रिले जोड़ेंगे और इसे मिट्टी की नमी के स्तर के आधार पर नियंत्रित करेंगे। + +## वर्चुअल हार्डवेयर + +वर्चुअल IoT डिवाइस एक सिम्युलेटेड Grove रिले का उपयोग करेगा। यह प्रयोग को भौतिक Grove रिले के साथ Raspberry Pi का उपयोग करने जैसा बनाए रखता है। + +एक भौतिक IoT डिवाइस में, रिले सामान्यतः-खुला रिले होता है (जिसका मतलब है कि जब रिले को कोई सिग्नल नहीं भेजा जाता है, तो आउटपुट सर्किट खुला या डिस्कनेक्टेड रहता है)। इस प्रकार का रिले 250V और 10A तक के आउटपुट सर्किट को संभाल सकता है। + +### CounterFit में रिले जोड़ें + +वर्चुअल रिले का उपयोग करने के लिए, आपको इसे CounterFit ऐप में जोड़ना होगा। + +#### कार्य + +CounterFit ऐप में रिले जोड़ें। + +1. यदि आपने पिछले पाठ से `soil-moisture-sensor` प्रोजेक्ट को VS Code में नहीं खोला है, तो इसे खोलें। आप इस प्रोजेक्ट में जोड़ने जा रहे हैं। + +1. सुनिश्चित करें कि CounterFit वेब ऐप चल रहा है। + +1. एक रिले बनाएं: + + 1. *Actuators* पैन में *Create actuator* बॉक्स में, *Actuator type* ड्रॉपडाउन करें और *Relay* चुनें। + + 1. *Pin* को *5* पर सेट करें। + + 1. **Add** बटन चुनें ताकि Pin 5 पर रिले बनाया जा सके। + + ![रिले सेटिंग्स](../../../../../translated_images/counterfit-create-relay.fa7c40fd0f2f6afc33b35ea94fcb235085be4861e14e3fe6b9b7bcfc82d1c888.hi.png) + + रिले बनाया जाएगा और एक्टुएटर्स सूची में दिखाई देगा। + + ![रिले बनाया गया](../../../../../translated_images/counterfit-relay.bbf74c1dbdc8b9acd983367fcbd06703a402aefef6af54ddb28e11307ba8a12c.hi.png) + +## रिले को प्रोग्राम करें + +अब मिट्टी की नमी सेंसर ऐप को वर्चुअल रिले का उपयोग करने के लिए प्रोग्राम किया जा सकता है। + +### कार्य + +वर्चुअल डिवाइस को प्रोग्राम करें। + +1. यदि आपने पिछले पाठ से `soil-moisture-sensor` प्रोजेक्ट को VS Code में नहीं खोला है, तो इसे खोलें। आप इस प्रोजेक्ट में जोड़ने जा रहे हैं। + +1. `app.py` फाइल में मौजूदा इम्पोर्ट्स के नीचे निम्नलिखित कोड जोड़ें: + + ```python + from counterfit_shims_grove.grove_relay import GroveRelay + ``` + + यह कथन Grove Python शिम लाइब्रेरी से `GroveRelay` को इम्पोर्ट करता है ताकि वर्चुअल Grove रिले के साथ इंटरैक्ट किया जा सके। + +1. `ADC` क्लास की घोषणा के नीचे निम्नलिखित कोड जोड़ें ताकि `GroveRelay` का एक इंस्टेंस बनाया जा सके: + + ```python + relay = GroveRelay(5) + ``` + + यह Pin **5** का उपयोग करके एक रिले बनाता है, वह पिन जिसे आपने रिले से जोड़ा था। + +1. यह जांचने के लिए कि रिले काम कर रहा है, `while True:` लूप में निम्नलिखित जोड़ें: + + ```python + relay.on() + time.sleep(.5) + relay.off() + ``` + + कोड रिले को चालू करता है, 0.5 सेकंड प्रतीक्षा करता है, फिर रिले को बंद करता है। + +1. Python ऐप चलाएं। रिले हर 10 सेकंड में चालू और बंद होगा, चालू और बंद होने के बीच आधे सेकंड की देरी के साथ। आप देखेंगे कि CounterFit ऐप में वर्चुअल रिले बंद और चालू हो रहा है। + + ![वर्चुअल रिले चालू और बंद हो रहा है](../../../../../images/virtual-relay-turn-on-off.gif) + +## मिट्टी की नमी से रिले को नियंत्रित करें + +अब जब रिले काम कर रहा है, इसे मिट्टी की नमी रीडिंग के अनुसार नियंत्रित किया जा सकता है। + +### कार्य + +रिले को नियंत्रित करें। + +1. रिले का परीक्षण करने के लिए जोड़े गए 3 लाइनों को हटा दें। उनकी जगह निम्नलिखित कोड जोड़ें: + + ```python + if soil_moisture > 450: + print("Soil Moisture is too low, turning relay on.") + relay.on() + else: + print("Soil Moisture is ok, turning relay off.") + relay.off() + ``` + + यह कोड मिट्टी की नमी सेंसर से मिट्टी की नमी स्तर की जांच करता है। यदि यह 450 से ऊपर है, तो रिले चालू करता है, और यदि यह 450 से नीचे जाता है, तो इसे बंद कर देता है। + + > 💁 याद रखें कि कैपेसिटिव मिट्टी की नमी सेंसर पढ़ता है - मिट्टी की नमी स्तर जितना कम होगा, मिट्टी में उतनी ही अधिक नमी होगी और इसके विपरीत। + +1. Python ऐप चलाएं। आप देखेंगे कि रिले मिट्टी की नमी स्तर के अनुसार चालू या बंद हो रहा है। मिट्टी की नमी सेंसर के लिए *Value* या *Random* सेटिंग्स बदलें ताकि मान बदल सके। + + ```output + Soil Moisture: 638 + Soil Moisture is too low, turning relay on. + Soil Moisture: 452 + Soil Moisture is too low, turning relay on. + Soil Moisture: 347 + Soil Moisture is ok, turning relay off. + ``` + +> 💁 आप इस कोड को [code-relay/virtual-device](../../../../../2-farm/lessons/3-automated-plant-watering/code-relay/virtual-device) फोल्डर में पा सकते हैं। + +😀 आपका वर्चुअल मिट्टी की नमी सेंसर रिले को नियंत्रित करने वाला प्रोग्राम सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/3-automated-plant-watering/wio-terminal-relay.md b/translations/hi/2-farm/lessons/3-automated-plant-watering/wio-terminal-relay.md new file mode 100644 index 00000000..a45ae69f --- /dev/null +++ b/translations/hi/2-farm/lessons/3-automated-plant-watering/wio-terminal-relay.md @@ -0,0 +1,23 @@ + +# रिले को नियंत्रित करें - Wio Terminal + +इस पाठ के इस भाग में, आप मिट्टी की नमी सेंसर के साथ-साथ Wio Terminal में एक रिले जोड़ेंगे और इसे मिट्टी की नमी के स्तर के आधार पर नियंत्रित करेंगे। + +## हार्डवेयर + +Wio Terminal को एक रिले की आवश्यकता है। + +आप जो रिले उपयोग करेंगे वह [Grove relay](https://www.seeedstudio.com/Grove-Relay.html) है। यह एक सामान्यतः-खुला रिले है (जिसका मतलब है कि जब रिले को कोई संकेत नहीं भेजा जाता है, तो आउटपुट सर्किट खुला या डिस्कनेक्ट रहता है) और यह 250V और 10A तक के आउटपुट सर्किट को संभाल सकता है। + +यह एक डिजिटल एक्टुएटर है, इसलिए इसे Wio Terminal के डिजिटल पिन से जोड़ा जाता है। संयुक्त एनालॉग/डिजिटल पोर्ट पहले से ही मिट्टी की नमी सेंसर के साथ उपयोग में है, इसलिए इसे दूसरे पोर्ट में प्लग किया जाता है, जो एक संयुक्त I + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md b/translations/hi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md new file mode 100644 index 00000000..6948412d --- /dev/null +++ b/translations/hi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md @@ -0,0 +1,449 @@ + +# अपने पौधे को क्लाउड पर माइग्रेट करें + +![इस पाठ का स्केच नोट](../../../../../translated_images/lesson-8.3f21f3c11159e6a0a376351973ea5724d5de68fa23b4288853a174bed9ac48c3.hi.jpg) + +> स्केच नोट [नित्या नरसिम्हन](https://github.com/nitya) द्वारा। बड़े संस्करण के लिए छवि पर क्लिक करें। + +यह पाठ [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn) के [IoT for Beginners Project 2 - Digital Agriculture series](https://youtube.com/playlist?list=PLmsFUfdnGr3yCutmcVg6eAUEfsGiFXgcx) का हिस्सा है। + +[![अपने डिवाइस को Azure IoT Hub के साथ क्लाउड से कनेक्ट करें](https://img.youtube.com/vi/bNxjopXkhvk/0.jpg)](https://youtu.be/bNxjopXkhvk) + +## प्री-लेक्चर क्विज़ + +[प्री-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/15) + +## परिचय + +पिछले पाठ में, आपने सीखा कि अपने पौधे को MQTT ब्रॉकर से कैसे कनेक्ट करें और किसी सर्वर कोड से एक रिले को नियंत्रित करें जो लोकल रूप से चल रहा हो। यह उस प्रकार की इंटरनेट-कनेक्टेड स्वचालित सिंचाई प्रणाली का मूल है, जिसका उपयोग घर पर व्यक्तिगत पौधों से लेकर वाणिज्यिक खेतों तक किया जाता है। + +IoT डिवाइस ने एक सार्वजनिक MQTT ब्रॉकर के साथ संवाद किया ताकि सिद्धांतों को प्रदर्शित किया जा सके, लेकिन यह सबसे विश्वसनीय या सुरक्षित तरीका नहीं है। इस पाठ में, आप क्लाउड और सार्वजनिक क्लाउड सेवाओं द्वारा प्रदान की जाने वाली IoT क्षमताओं के बारे में जानेंगे। आप यह भी सीखेंगे कि अपने पौधे को सार्वजनिक MQTT ब्रॉकर से इन क्लाउड सेवाओं में कैसे माइग्रेट करें। + +इस पाठ में हम कवर करेंगे: + +* [क्लाउड क्या है?](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [क्लाउड सब्सक्रिप्शन बनाएं](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [क्लाउड IoT सेवाएं](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [क्लाउड में एक IoT सेवा बनाएं](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [IoT हब के साथ संवाद करें](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) +* [अपने डिवाइस को IoT सेवा से कनेक्ट करें](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud) + +## क्लाउड क्या है? + +क्लाउड से पहले, जब कोई कंपनी अपने कर्मचारियों को सेवाएं प्रदान करना चाहती थी (जैसे डेटाबेस या फाइल स्टोरेज), या जनता को (जैसे वेबसाइट), तो वे एक डेटा सेंटर बनाते और चलाते थे। यह एक छोटे कमरे में कुछ कंप्यूटरों से लेकर एक इमारत में कई कंप्यूटरों तक हो सकता था। कंपनी सब कुछ प्रबंधित करती थी, जिसमें शामिल था: + +* कंप्यूटर खरीदना +* हार्डवेयर रखरखाव +* पावर और कूलिंग +* नेटवर्किंग +* सुरक्षा, जिसमें इमारत और कंप्यूटर पर सॉफ़्टवेयर की सुरक्षा शामिल है +* सॉफ़्टवेयर इंस्टॉलेशन और अपडेट + +यह बहुत महंगा हो सकता था, कुशल कर्मचारियों की एक विस्तृत श्रृंखला की आवश्यकता होती थी, और जब आवश्यक हो तो इसे बदलने में बहुत धीमा होता था। उदाहरण के लिए, यदि एक ऑनलाइन स्टोर को व्यस्त छुट्टियों के मौसम के लिए योजना बनानी होती, तो उन्हें महीनों पहले हार्डवेयर खरीदने, उसे कॉन्फ़िगर करने, और बिक्री प्रक्रिया चलाने के लिए सॉफ़्टवेयर इंस्टॉल करने की योजना बनानी होती। छुट्टियों के मौसम के बाद, जब बिक्री फिर से कम हो जाती, तो उनके पास ऐसे कंप्यूटर होते जिनके लिए उन्होंने भुगतान किया होता, लेकिन वे अगली व्यस्त अवधि तक बेकार पड़े रहते। + +✅ क्या आपको लगता है कि यह कंपनियों को तेजी से काम करने की अनुमति देगा? यदि एक ऑनलाइन कपड़ों का रिटेलर अचानक किसी सेलिब्रिटी के उनके कपड़े पहनने के कारण लोकप्रिय हो जाता है, तो क्या वे अपने कंप्यूटिंग पावर को तेजी से बढ़ा सकते हैं ताकि ऑर्डर्स की अचानक बढ़ोतरी को संभाल सकें? + +### किसी और का कंप्यूटर + +क्लाउड को अक्सर मजाक में 'किसी और का कंप्यूटर' कहा जाता है। प्रारंभिक विचार सरल था - कंप्यूटर खरीदने के बजाय, आप किसी और का कंप्यूटर किराए पर लें। कोई और, एक क्लाउड कंप्यूटिंग प्रदाता, विशाल डेटा सेंटर प्रबंधित करेगा। वे हार्डवेयर खरीदने और इंस्टॉल करने, पावर और कूलिंग प्रबंधित करने, नेटवर्किंग, इमारत की सुरक्षा, हार्डवेयर और सॉफ़्टवेयर अपडेट, सब कुछ के लिए जिम्मेदार होंगे। ग्राहक के रूप में, आप केवल उन कंप्यूटरों को किराए पर लेंगे जिनकी आपको आवश्यकता है, मांग बढ़ने पर अधिक किराए पर लेंगे, और मांग कम होने पर किराए को कम कर देंगे। ये क्लाउड डेटा सेंटर दुनिया भर में फैले हुए हैं। + +![Microsoft क्लाउड डेटा सेंटर](../../../../../translated_images/azure-region-existing.73f704604f2aa6cb9b5a49ed40e93d4fd81ae3f4e6af4a8ca504023902832f56.hi.png) +![Microsoft क्लाउड डेटा सेंटर का नियोजित विस्तार](../../../../../translated_images/azure-region-planned-expansion.a5074a1e8af74f156a73552d502429e5b126ea5019274d767ecb4b9afdad442b.hi.png) + +ये डेटा सेंटर कई वर्ग किलोमीटर के आकार के हो सकते हैं। ऊपर की छवियां कुछ साल पहले एक Microsoft क्लाउड डेटा सेंटर में ली गई थीं, और प्रारंभिक आकार के साथ-साथ नियोजित विस्तार को दिखाती हैं। विस्तार के लिए साफ किया गया क्षेत्र 5 वर्ग किलोमीटर से अधिक है। + +> 💁 इन डेटा सेंटरों को इतनी बड़ी मात्रा में बिजली की आवश्यकता होती है कि कुछ के पास अपने स्वयं के पावर स्टेशन होते हैं। उनके आकार और क्लाउड प्रदाताओं के निवेश के स्तर के कारण, वे आमतौर पर पर्यावरण के अनुकूल होते हैं। वे छोटे डेटा सेंटरों की तुलना में अधिक कुशल होते हैं, वे ज्यादातर नवीकरणीय ऊर्जा पर चलते हैं, और क्लाउड प्रदाता कचरे को कम करने, पानी के उपयोग को कम करने, और डेटा सेंटर बनाने के लिए काटे गए जंगलों की भरपाई के लिए नए पेड़ लगाने के लिए कड़ी मेहनत करते हैं। आप [Azure स्थिरता साइट](https://azure.microsoft.com/global-infrastructure/sustainability/?WT.mc_id=academic-17441-jabenn) पर पढ़ सकते हैं कि एक क्लाउड प्रदाता स्थिरता पर कैसे काम कर रहा है। + +✅ कुछ शोध करें: [Microsoft का Azure](https://azure.microsoft.com/?WT.mc_id=academic-17441-jabenn) या [Google का GCP](https://cloud.google.com) जैसे प्रमुख क्लाउड्स के बारे में पढ़ें। उनके पास कितने डेटा सेंटर हैं, और वे दुनिया में कहां स्थित हैं? + +क्लाउड का उपयोग कंपनियों के लिए लागत को कम रखता है, और उन्हें अपने मुख्य कार्यों पर ध्यान केंद्रित करने की अनुमति देता है, जबकि क्लाउड कंप्यूटिंग विशेषज्ञता प्रदाता के हाथों में रहती है। कंपनियों को अब डेटा सेंटर स्पेस किराए पर लेने या खरीदने, कनेक्टिविटी और पावर के लिए विभिन्न प्रदाताओं को भुगतान करने, या विशेषज्ञों को नियुक्त करने की आवश्यकता नहीं है। इसके बजाय, वे क्लाउड प्रदाता को एक मासिक बिल का भुगतान कर सकते हैं ताकि सब कुछ प्रबंधित किया जा सके। + +क्लाउड प्रदाता तब लागत को कम करने के लिए पैमाने की अर्थव्यवस्थाओं का उपयोग कर सकते हैं, थोक में कंप्यूटर खरीद सकते हैं, रखरखाव के लिए अपने कार्यभार को कम करने के लिए टूलिंग में निवेश कर सकते हैं, यहां तक कि अपने क्लाउड ऑफरिंग को बेहतर बनाने के लिए अपने स्वयं के हार्डवेयर को डिज़ाइन और निर्माण कर सकते हैं। + +### Microsoft Azure + +Azure Microsoft का डेवलपर क्लाउड है, और यही क्लाउड आप इन पाठों के लिए उपयोग करेंगे। नीचे दिया गया वीडियो Azure का एक छोटा सा अवलोकन देता है: + +[![Azure वीडियो का अवलोकन](../../../../../translated_images/what-is-azure-video-thumbnail.20174db09e03bbb87d213f928d3cb27410305d2e567e952827de8478dbda959b.hi.png)](https://www.microsoft.com/videoplayer/embed/RE4Ibng?WT.mc_id=academic-17441-jabenn) + +## क्लाउड सब्सक्रिप्शन बनाएं + +क्लाउड में सेवाओं का उपयोग करने के लिए, आपको एक क्लाउड प्रदाता के साथ एक सब्सक्रिप्शन के लिए साइन अप करना होगा। इस पाठ के लिए, आप Microsoft Azure सब्सक्रिप्शन के लिए साइन अप करेंगे। यदि आपके पास पहले से ही एक Azure सब्सक्रिप्शन है, तो आप इस कार्य को छोड़ सकते हैं। यहां वर्णित सब्सक्रिप्शन विवरण लेखन के समय सही हैं, लेकिन बदल सकते हैं। + +> 💁 यदि आप अपने स्कूल के माध्यम से इन पाठों तक पहुंच रहे हैं, तो आपके पास पहले से ही एक Azure सब्सक्रिप्शन उपलब्ध हो सकता है। अपने शिक्षक से जांचें। + +Azure के दो अलग-अलग प्रकार के मुफ्त सब्सक्रिप्शन हैं जिनके लिए आप साइन अप कर सकते हैं: + +* **Azure for Students** - यह 18+ छात्रों के लिए डिज़ाइन किया गया एक सब्सक्रिप्शन है। साइन अप करने के लिए आपको क्रेडिट कार्ड की आवश्यकता नहीं है, और आप यह सत्यापित करने के लिए अपने स्कूल ईमेल पते का उपयोग करते हैं कि आप छात्र हैं। साइन अप करने पर आपको क्लाउड संसाधनों पर खर्च करने के लिए US$100 मिलते हैं, साथ ही मुफ्त सेवाएं जिनमें IoT सेवा का एक मुफ्त संस्करण शामिल है। यह 12 महीने तक चलता है, और आप हर साल नवीनीकरण कर सकते हैं जब तक आप छात्र बने रहते हैं। + +* **Azure फ्री सब्सक्रिप्शन** - यह उन लोगों के लिए एक सब्सक्रिप्शन है जो छात्र नहीं हैं। इस सब्सक्रिप्शन के लिए साइन अप करने के लिए आपको एक क्रेडिट कार्ड की आवश्यकता होगी, लेकिन आपका कार्ड बिल नहीं किया जाएगा, यह केवल यह सत्यापित करने के लिए उपयोग किया जाता है कि आप एक वास्तविक व्यक्ति हैं, न कि एक बॉट। आपको पहले 30 दिनों में किसी भी सेवा पर उपयोग करने के लिए $200 का क्रेडिट मिलता है, साथ ही Azure सेवाओं के मुफ्त टियर मिलते हैं। एक बार जब आपका क्रेडिट समाप्त हो जाता है, तो आपका कार्ड तब तक चार्ज नहीं किया जाएगा जब तक आप इसे पे-एज़-यू-गो सब्सक्रिप्शन में परिवर्तित नहीं करते। + +> 💁 Microsoft 18 वर्ष से कम उम्र के छात्रों के लिए Azure for Students Starter सब्सक्रिप्शन प्रदान करता है, लेकिन लेखन के समय यह किसी भी IoT सेवाओं का समर्थन नहीं करता। + +### कार्य - एक मुफ्त क्लाउड सब्सक्रिप्शन के लिए साइन अप करें + +यदि आप 18+ आयु के छात्र हैं, तो आप Azure for Students सब्सक्रिप्शन के लिए साइन अप कर सकते हैं। आपको स्कूल ईमेल पते के साथ सत्यापन करना होगा। आप इसे दो तरीकों में से एक में कर सकते हैं: + +* [education.github.com/pack](https://education.github.com/pack) पर GitHub छात्र डेवलपर पैक के लिए साइन अप करें। यह आपको GitHub और Microsoft Azure सहित टूल और ऑफ़र तक पहुंच प्रदान करता है। एक बार जब आप डेवलपर पैक के लिए साइन अप कर लेते हैं, तो आप Azure for Students ऑफ़र को सक्रिय कर सकते हैं। + +* सीधे [azure.microsoft.com/free/students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-17441-jabenn) पर Azure for Students खाते के लिए साइन अप करें। + +> ⚠️ यदि आपका स्कूल ईमेल पता मान्यता प्राप्त नहीं है, तो इस [रेपो में एक समस्या उठाएं](https://github.com/Microsoft/IoT-For-Beginners/issues) और हम देखेंगे कि क्या इसे Azure for Students अनुमति सूची में जोड़ा जा सकता है। + +यदि आप छात्र नहीं हैं, या आपके पास मान्य स्कूल ईमेल पता नहीं है, तो आप Azure फ्री सब्सक्रिप्शन के लिए साइन अप कर सकते हैं। + +* [azure.microsoft.com/free](https://azure.microsoft.com/free/?WT.mc_id=academic-17441-jabenn) पर Azure फ्री सब्सक्रिप्शन के लिए साइन अप करें। + +## क्लाउड IoT सेवाएं + +आपने जो सार्वजनिक टेस्ट MQTT ब्रॉकर उपयोग किया है, वह सीखने के लिए एक शानदार उपकरण है, लेकिन व्यावसायिक सेटिंग में उपयोग करने के लिए इसमें कई कमियां हैं: + +* विश्वसनीयता - यह एक मुफ्त सेवा है जिसमें कोई गारंटी नहीं है, और इसे कभी भी बंद किया जा सकता है +* सुरक्षा - यह सार्वजनिक है, इसलिए कोई भी आपके टेलीमेट्री को सुन सकता है या आपके हार्डवेयर को नियंत्रित करने के लिए कमांड भेज सकता है +* प्रदर्शन - इसे केवल कुछ टेस्ट संदेशों के लिए डिज़ाइन किया गया है, इसलिए यह बड़ी संख्या में संदेशों को संभाल नहीं सकता +* खोज - यह जानने का कोई तरीका नहीं है कि कौन से डिवाइस कनेक्टेड हैं + +क्लाउड में IoT सेवाएं इन समस्याओं का समाधान करती हैं। इन्हें बड़े क्लाउड प्रदाताओं द्वारा बनाए रखा जाता है जो विश्वसनीयता में भारी निवेश करते हैं और किसी भी समस्या को ठीक करने के लिए तैयार रहते हैं। इनमें सुरक्षा अंतर्निहित होती है ताकि हैकर्स आपके डेटा को न पढ़ सकें या नकली कमांड न भेज सकें। ये उच्च प्रदर्शन वाली होती हैं, जो हर दिन लाखों संदेशों को संभालने में सक्षम होती हैं, और आवश्यकता के अनुसार क्लाउड का लाभ उठाकर स्केल करती हैं। + +> 💁 हालांकि आप इन लाभों के लिए मासिक शुल्क का भुगतान करते हैं, अधिकांश क्लाउड प्रदाता अपनी IoT सेवा का एक मुफ्त संस्करण प्रदान करते हैं जिसमें प्रति दिन सीमित संदेश या कनेक्ट होने वाले डिवाइस होते हैं। यह मुफ्त संस्करण आमतौर पर डेवलपर के लिए सेवा के बारे में सीखने के लिए पर्याप्त होता है। इस पाठ में आप एक मुफ्त संस्करण का उपयोग करेंगे। + +IoT डिवाइस या तो डिवाइस SDK (एक लाइब्रेरी जो सेवा की विशेषताओं के साथ काम करने के लिए कोड प्रदान करती है) का उपयोग करके, या सीधे MQTT या HTTP जैसे संचार प्रोटोकॉल के माध्यम से क्लाउड सेवा से कनेक्ट होते हैं। डिवाइस SDK आमतौर पर सबसे आसान तरीका होता है क्योंकि यह आपके लिए सब कुछ संभालता है, जैसे कि कौन से टॉपिक्स पर प्रकाशित करना है या सब्सक्राइब करना है, और सुरक्षा को कैसे संभालना है। + +![डिवाइस डिवाइस SDK का उपयोग करके सेवा से कनेक्ट होते हैं। सर्वर कोड भी SDK के माध्यम से सेवा से कनेक्ट होता है](../../../../../translated_images/iot-service-connectivity.7e873847921a5d6fd60d0ba3a943210194518cee0d4e362476624316443275c3.hi.png) + +आपका डिवाइस तब आपके एप्लिकेशन के अन्य भागों के साथ इस सेवा के माध्यम से संवाद करता है - उसी तरह जैसे आपने MQTT के माध्यम से टेलीमेट्री भेजी और कमांड प्राप्त किए। यह आमतौर पर सेवा SDK या एक समान लाइब्रेरी का उपयोग करके किया जाता है। संदेश आपके डिवाइस से सेवा तक आते हैं, जहां आपके एप्लिकेशन के अन्य घटक उन्हें पढ़ सकते हैं, और संदेश आपके डिवाइस पर वापस भेजे जा सकते हैं। + +![जिन डिवाइसों के पास वैध सीक्रेट की नहीं है, वे IoT सेवा से कनेक्ट नहीं हो सकते](../../../../../translated_images/iot-service-allowed-denied-connection.818b0063ac213fb84204a7229303764d9b467ca430fb822b4ac2fca267d56726.hi.png) + +ये सेवाएं सुरक्षा को लागू करती हैं, यह जानकर कि कौन से डिवाइस कनेक्ट हो सकते हैं और डेटा भेज सकते हैं, या तो डिवाइस को सेवा के साथ पहले से पंजीकृत करके, या उन्हें सीक्रेट कीज़ या प्रमाणपत्र देकर जो वे पहली बार कनेक्ट होने पर सेवा के साथ खुद को पंजीकृत करने के लिए उपयोग कर सकते हैं। अज्ञात डिवाइस कनेक्ट नहीं हो सकते, यदि वे प्रयास करते हैं तो सेवा कनेक्शन को अस्वीकार कर देती है और उनके द्वारा भेजे गए संदेशों को अनदेखा कर देती है। + +✅ कुछ शोध करें: एक खुली IoT सेवा होने का क्या नुकसान है जहां कोई भी डिवाइस या कोड कनेक्ट हो सकता है? क्या आप ऐसे विशिष्ट उदाहरण ढूंढ सकते हैं जहां हैकर्स ने इसका फायदा उठाया हो? + +आपके एप्लिकेशन के अन्य घटक IoT सेवा से कनेक्ट हो सकते हैं और यह जान सकते हैं कि कौन से डिवाइस कनेक्टेड या पंजीकृत हैं, और उनके साथ सीधे या सामूहिक रूप से संवाद कर सकते हैं। +💁 IoT सेवाएँ अतिरिक्त क्षमताओं को भी लागू करती हैं, और क्लाउड प्रदाता अतिरिक्त सेवाएँ और एप्लिकेशन प्रदान करते हैं जिन्हें इस सेवा से जोड़ा जा सकता है। उदाहरण के लिए, यदि आप सभी डिवाइसों द्वारा भेजे गए टेलीमेट्री संदेशों को एक डेटाबेस में संग्रहीत करना चाहते हैं, तो आमतौर पर क्लाउड प्रदाता के कॉन्फ़िगरेशन टूल में कुछ ही क्लिक में सेवा को डेटाबेस से जोड़ना और डेटा को स्ट्रीम करना संभव होता है। +## क्लाउड में एक IoT सेवा बनाएं + +अब जब आपके पास Azure सदस्यता है, तो आप IoT सेवा के लिए साइन अप कर सकते हैं। Microsoft की IoT सेवा को Azure IoT Hub कहा जाता है। + +![Azure IoT Hub लोगो](../../../../../translated_images/azure-iot-hub-logo.28a19de76d0a1932464d858f7558712bcdace3e5ec69c434d482ed7ce41c3a26.hi.png) + +नीचे दिया गया वीडियो Azure IoT Hub का संक्षिप्त परिचय देता है: + +[![Azure IoT Hub वीडियो का परिचय](https://img.youtube.com/vi/smuZaZZXKsU/0.jpg)](https://www.youtube.com/watch?v=smuZaZZXKsU) + +> 🎥 वीडियो देखने के लिए ऊपर दी गई छवि पर क्लिक करें + +✅ कुछ समय निकालें और [Microsoft IoT Hub दस्तावेज़](https://docs.microsoft.com/azure/iot-hub/about-iot-hub?WT.mc_id=academic-17441-jabenn) में IoT Hub का परिचय पढ़ें। + +Azure में उपलब्ध क्लाउड सेवाओं को वेब-आधारित पोर्टल या कमांड-लाइन इंटरफ़ेस (CLI) के माध्यम से कॉन्फ़िगर किया जा सकता है। इस कार्य के लिए, आप CLI का उपयोग करेंगे। + +### कार्य - Azure CLI इंस्टॉल करें + +Azure CLI का उपयोग करने के लिए, पहले इसे आपके पीसी या मैक पर इंस्टॉल करना होगा। + +1. [Azure CLI दस्तावेज़](https://docs.microsoft.com/cli/azure/install-azure-cli?WT.mc_id=academic-17441-jabenn) में दिए गए निर्देशों का पालन करें और CLI इंस्टॉल करें। + +1. Azure CLI कई एक्सटेंशन का समर्थन करता है जो Azure सेवाओं की एक विस्तृत श्रृंखला को प्रबंधित करने की क्षमता जोड़ते हैं। निम्नलिखित कमांड को अपने कमांड लाइन या टर्मिनल से चलाकर IoT एक्सटेंशन इंस्टॉल करें: + + ```sh + az extension add --name azure-iot + ``` + +1. अपने कमांड लाइन या टर्मिनल से निम्नलिखित कमांड चलाएं ताकि Azure CLI से अपनी Azure सदस्यता में लॉग इन कर सकें। + + ```sh + az login + ``` + + एक वेब पेज आपके डिफ़ॉल्ट ब्राउज़र में लॉन्च होगा। उस खाते का उपयोग करके लॉग इन करें जिसे आपने अपनी Azure सदस्यता के लिए साइन अप करने के लिए उपयोग किया था। लॉग इन करने के बाद, आप ब्राउज़र टैब को बंद कर सकते हैं। + +1. यदि आपके पास कई Azure सदस्यताएँ हैं, जैसे कि स्कूल द्वारा प्रदान की गई और आपकी अपनी Azure for Students सदस्यता, तो आपको वह चुननी होगी जिसे आप उपयोग करना चाहते हैं। निम्नलिखित कमांड चलाएं ताकि आप उन सभी सदस्यताओं की सूची देख सकें जिन तक आपको पहुंच है: + + ```sh + az account list --output table + ``` + + आउटपुट में, आपको प्रत्येक सदस्यता का नाम और उसका `SubscriptionId` दिखाई देगा। + + ```output + ➜ ~ az account list --output table + Name CloudName SubscriptionId State IsDefault + ---------------------- ----------- ------------------------------------ ------- ----------- + School-subscription AzureCloud cb30cde9-814a-42f0-a111-754cb788e4e1 Enabled True + Azure for Students AzureCloud fa51c31b-162c-4599-add6-781def2e1fbf Enabled False + ``` + + उस सदस्यता को चुनने के लिए जिसे आप उपयोग करना चाहते हैं, निम्नलिखित कमांड का उपयोग करें: + + ```sh + az account set --subscription + ``` + + `` को उस सदस्यता के Id से बदलें जिसे आप उपयोग करना चाहते हैं। इस कमांड को चलाने के बाद, अपने खातों की सूची देखने के लिए कमांड को फिर से चलाएं। आप देखेंगे कि `IsDefault` कॉलम उस सदस्यता के लिए `True` के रूप में चिह्नित होगा जिसे आपने अभी सेट किया है। + +### कार्य - एक संसाधन समूह बनाएं + +Azure सेवाओं, जैसे IoT Hub इंस्टेंस, वर्चुअल मशीन, डेटाबेस, या AI सेवाओं को **संसाधन** कहा जाता है। हर संसाधन को एक **संसाधन समूह** के अंदर रहना होता है, जो एक या अधिक संसाधनों का तार्किक समूह होता है। + +> 💁 संसाधन समूहों का उपयोग करने का मतलब है कि आप कई सेवाओं को एक साथ प्रबंधित कर सकते हैं। उदाहरण के लिए, जब आप इस प्रोजेक्ट के सभी पाठ समाप्त कर लेते हैं, तो आप संसाधन समूह को हटा सकते हैं, और उसमें मौजूद सभी संसाधन स्वचालित रूप से हटा दिए जाएंगे। + +1. दुनिया भर में कई Azure डेटा केंद्र हैं, जो क्षेत्रों में विभाजित हैं। जब आप Azure संसाधन या संसाधन समूह बनाते हैं, तो आपको यह निर्दिष्ट करना होता है कि आप इसे कहाँ बनाना चाहते हैं। स्थानों की सूची प्राप्त करने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + az account list-locations --output table + ``` + + आपको स्थानों की एक सूची दिखाई देगी। यह सूची लंबी होगी। + + > 💁 लेखन के समय, आपके पास 65 स्थानों में तैनात करने का विकल्प है। + + ```output + ➜ ~ az account list-locations --output table + DisplayName Name RegionalDisplayName + ------------------------ ------------------- ------------------------------------- + East US eastus (US) East US + East US 2 eastus2 (US) East US 2 + South Central US southcentralus (US) South Central US + ... + ``` + + अपने निकटतम क्षेत्र के `Name` कॉलम से मान को नोट करें। आप [Azure भौगोलिक पृष्ठ](https://azure.microsoft.com/global-infrastructure/geographies/?WT.mc_id=academic-17441-jabenn) पर मानचित्र पर क्षेत्रों को देख सकते हैं। + +1. `soil-moisture-sensor` नामक संसाधन समूह बनाने के लिए निम्नलिखित कमांड चलाएं। संसाधन समूह के नाम आपकी सदस्यता में अद्वितीय होने चाहिए। + + ```sh + az group create --name soil-moisture-sensor \ + --location + ``` + + `` को उस स्थान से बदलें जिसे आपने पिछले चरण में चुना था। + +### कार्य - एक IoT Hub बनाएं + +अब आप अपने संसाधन समूह में एक IoT Hub संसाधन बना सकते हैं। + +1. अपने IoT Hub संसाधन बनाने के लिए निम्नलिखित कमांड का उपयोग करें: + + ```sh + az iot hub create --resource-group soil-moisture-sensor \ + --sku F1 \ + --partition-count 2 \ + --name + ``` + + `` को अपने हब के लिए एक नाम से बदलें। यह नाम वैश्विक रूप से अद्वितीय होना चाहिए - यानी किसी अन्य व्यक्ति द्वारा बनाए गए किसी भी IoT Hub का नाम समान नहीं हो सकता। इस नाम का उपयोग हब की ओर इशारा करने वाले URL में किया जाता है, इसलिए इसे अद्वितीय होना चाहिए। `soil-moisture-sensor-` जैसा कुछ उपयोग करें और अंत में एक अद्वितीय पहचानकर्ता जोड़ें, जैसे कुछ यादृच्छिक शब्द या आपका नाम। + + `--sku F1` विकल्प इसे मुफ्त स्तर का उपयोग करने के लिए कहता है। मुफ्त स्तर प्रति दिन 8,000 संदेशों का समर्थन करता है और पूर्ण-कीमत स्तरों की अधिकांश सुविधाएँ प्रदान करता है। + + > 🎓 Azure सेवाओं के विभिन्न मूल्य स्तरों को स्तर कहा जाता है। प्रत्येक स्तर की अलग लागत होती है और यह विभिन्न सुविधाएँ या डेटा वॉल्यूम प्रदान करता है। + + > 💁 यदि आप मूल्य निर्धारण के बारे में अधिक जानना चाहते हैं, तो आप [Azure IoT Hub मूल्य निर्धारण गाइड](https://azure.microsoft.com/pricing/details/iot-hub/?WT.mc_id=academic-17441-jabenn) देख सकते हैं। + + `--partition-count 2` विकल्प परिभाषित करता है कि IoT Hub कितने डेटा स्ट्रीम का समर्थन करता है। अधिक विभाजन डेटा अवरोधन को कम करते हैं जब कई चीजें IoT Hub से पढ़ती और लिखती हैं। विभाजन इन पाठों के दायरे से बाहर हैं, लेकिन मुफ्त स्तर IoT Hub बनाने के लिए इस मान को सेट करना आवश्यक है। + + > 💁 आप अपनी सदस्यता में केवल एक मुफ्त स्तर IoT Hub रख सकते हैं। + +IoT Hub बनाया जाएगा। इसे पूरा होने में एक मिनट या उससे अधिक समय लग सकता है। + +## IoT Hub के साथ संवाद करें + +पिछले पाठ में, आपने MQTT का उपयोग किया और विभिन्न विषयों पर संदेश भेजे और प्राप्त किए, प्रत्येक विषय का अलग उद्देश्य था। विभिन्न विषयों पर संदेश भेजने के बजाय, IoT Hub में डिवाइस और हब के बीच संवाद करने के लिए कई परिभाषित तरीके हैं। + +> 💁 अंदर से, IoT Hub और आपके डिवाइस के बीच यह संवाद MQTT, HTTPS या AMQP का उपयोग कर सकता है। + +* डिवाइस से क्लाउड (D2C) संदेश - ये संदेश डिवाइस से IoT Hub को भेजे जाते हैं, जैसे टेलीमेट्री। इन्हें आपके एप्लिकेशन कोड द्वारा IoT Hub से पढ़ा जा सकता है। + + > 🎓 अंदर से, IoT Hub एक Azure सेवा का उपयोग करता है जिसे [Event Hubs](https://docs.microsoft.com/azure/event-hubs/?WT.mc_id=academic-17441-jabenn) कहा जाता है। जब आप हब को भेजे गए संदेशों को पढ़ने के लिए कोड लिखते हैं, तो इन्हें अक्सर घटनाएँ कहा जाता है। + +* क्लाउड से डिवाइस (C2D) संदेश - ये संदेश एप्लिकेशन कोड से IoT Hub के माध्यम से IoT डिवाइस को भेजे जाते हैं। + +* डायरेक्ट मेथड रिक्वेस्ट - ये संदेश एप्लिकेशन कोड से IoT Hub के माध्यम से IoT डिवाइस को भेजे जाते हैं ताकि डिवाइस कुछ करे, जैसे एक एक्टुएटर को नियंत्रित करना। इन संदेशों को प्रतिक्रिया की आवश्यकता होती है ताकि आपका एप्लिकेशन कोड बता सके कि इसे सफलतापूर्वक संसाधित किया गया था या नहीं। + +* डिवाइस ट्विन्स - ये JSON दस्तावेज़ हैं जो डिवाइस और IoT Hub के बीच सिंक्रनाइज़ रहते हैं, और इन्हें डिवाइस द्वारा रिपोर्ट की गई सेटिंग्स या अन्य गुणों को संग्रहीत करने के लिए उपयोग किया जाता है, या IoT Hub द्वारा डिवाइस पर सेट किया जाना चाहिए (इसे इच्छित कहा जाता है)। + +IoT Hub संदेशों और डायरेक्ट मेथड रिक्वेस्ट को एक कॉन्फ़िगर करने योग्य अवधि (डिफ़ॉल्ट रूप से एक दिन) के लिए संग्रहीत कर सकता है, इसलिए यदि कोई डिवाइस या एप्लिकेशन कोड कनेक्शन खो देता है, तो यह पुनः कनेक्ट करने के बाद ऑफ़लाइन रहते हुए भेजे गए संदेशों को पुनः प्राप्त कर सकता है। डिवाइस ट्विन्स IoT Hub में स्थायी रूप से संग्रहीत रहते हैं, इसलिए किसी भी समय डिवाइस पुनः कनेक्ट कर सकता है और नवीनतम डिवाइस ट्विन प्राप्त कर सकता है। + +✅ कुछ शोध करें: इन संदेश प्रकारों के बारे में अधिक पढ़ें [डिवाइस-से-क्लाउड संचार मार्गदर्शन](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-d2c-guidance?WT.mc_id=academic-17441-jabenn) और [क्लाउड-से-डिवाइस संचार मार्गदर्शन](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-c2d-guidance?WT.mc_id=academic-17441-jabenn) IoT Hub दस्तावेज़ में। + +## अपने डिवाइस को IoT सेवा से कनेक्ट करें + +एक बार हब बन जाने के बाद, आपका IoT डिवाइस इससे कनेक्ट हो सकता है। केवल पंजीकृत डिवाइस ही सेवा से कनेक्ट हो सकते हैं, इसलिए आपको पहले अपने डिवाइस को पंजीकृत करना होगा। जब आप पंजीकरण करते हैं, तो आपको एक कनेक्शन स्ट्रिंग वापस मिल सकती है जिसे डिवाइस कनेक्ट करने के लिए उपयोग कर सकता है। यह कनेक्शन स्ट्रिंग डिवाइस विशिष्ट होती है, और इसमें IoT Hub, डिवाइस और एक गुप्त कुंजी के बारे में जानकारी होती है जो इस डिवाइस को कनेक्ट करने की अनुमति देती है। + +> 🎓 कनेक्शन स्ट्रिंग एक सामान्य शब्द है जो एक टेक्स्ट के टुकड़े को संदर्भित करता है जिसमें कनेक्शन विवरण होते हैं। इनका उपयोग IoT Hubs, डेटाबेस और कई अन्य सेवाओं से कनेक्ट करने के लिए किया जाता है। इनमें आमतौर पर सेवा के लिए एक पहचानकर्ता होता है, जैसे कि URL, और सुरक्षा जानकारी जैसे गुप्त कुंजी। इन्हें सेवा से कनेक्ट करने के लिए SDKs को पास किया जाता है। + +> ⚠️ कनेक्शन स्ट्रिंग को सुरक्षित रखा जाना चाहिए! सुरक्षा पर अधिक विस्तार से एक भविष्य के पाठ में चर्चा की जाएगी। + +### कार्य - अपने IoT डिवाइस को पंजीकृत करें + +Azure CLI का उपयोग करके IoT डिवाइस को आपके IoT Hub के साथ पंजीकृत किया जा सकता है। + +1. डिवाइस को पंजीकृत करने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + az iot hub device-identity create --device-id soil-moisture-sensor \ + --hub-name + ``` + + `` को उस नाम से बदलें जिसे आपने अपने IoT Hub के लिए उपयोग किया था। + + यह `soil-moisture-sensor` के ID के साथ एक डिवाइस बनाएगा। + +1. जब आपका IoT डिवाइस SDK का उपयोग करके आपके IoT Hub से कनेक्ट होता है, तो उसे एक कनेक्शन स्ट्रिंग का उपयोग करना होगा जो हब का URL और एक गुप्त कुंजी देता है। कनेक्शन स्ट्रिंग प्राप्त करने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + az iot hub device-identity connection-string show --device-id soil-moisture-sensor \ + --output table \ + --hub-name + ``` + + `` को उस नाम से बदलें जिसे आपने अपने IoT Hub के लिए उपयोग किया था। + +1. आउटपुट में दिखाई देने वाली कनेक्शन स्ट्रिंग को सहेजें क्योंकि आपको इसकी बाद में आवश्यकता होगी। + +### कार्य - अपने IoT डिवाइस को क्लाउड से कनेक्ट करें + +अपने IoT डिवाइस को क्लाउड से कनेक्ट करने के लिए संबंधित गाइड का अनुसरण करें: + +* [Arduino - Wio Terminal](wio-terminal-connect-hub.md) +* [सिंगल-बोर्ड कंप्यूटर - Raspberry Pi/Virtual IoT डिवाइस](single-board-computer-connect-hub.md) + +### कार्य - घटनाओं की निगरानी करें + +अभी के लिए, आप अपने सर्वर कोड को अपडेट नहीं करेंगे। इसके बजाय आप Azure CLI का उपयोग करके अपने IoT डिवाइस से भेजे गए घटनाओं की निगरानी कर सकते हैं। + +1. सुनिश्चित करें कि आपका IoT डिवाइस चल रहा है और मिट्टी की नमी के टेलीमेट्री मान भेज रहा है। + +1. अपने IoT Hub को भेजे गए संदेशों की निगरानी के लिए अपने कमांड प्रॉम्प्ट या टर्मिनल में निम्नलिखित कमांड चलाएं: + + ```sh + az iot hub monitor-events --hub-name + ``` + + `` को उस नाम से बदलें जिसे आपने अपने IoT Hub के लिए उपयोग किया था। + + जैसे ही आपका IoT डिवाइस संदेश भेजता है, आपको कंसोल आउटपुट में संदेश दिखाई देंगे। + + ```output + Starting event monitor, use ctrl-c to stop... + { + "event": { + "origin": "soil-moisture-sensor", + "module": "", + "interface": "", + "component": "", + "payload": "{\"soil_moisture\": 376}" + } + }, + { + "event": { + "origin": "soil-moisture-sensor", + "module": "", + "interface": "", + "component": "", + "payload": "{\"soil_moisture\": 381}" + } + } + ``` + + `payload` की सामग्री आपके IoT डिवाइस द्वारा भेजे गए संदेश से मेल खाएगी। + + > लेखन के समय, `az iot` एक्सटेंशन Apple Silicon पर पूरी तरह से काम नहीं कर रहा है। यदि आप Apple Silicon डिवाइस का उपयोग कर रहे हैं, तो आपको संदेशों की निगरानी किसी अन्य तरीके से करनी होगी, जैसे [Azure IoT Tools for Visual Studio Code](https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-vscode-iot-toolkit-cloud-device-messaging) का उपयोग करना। + +1. इन संदेशों में कई गुण होते हैं जो स्वचालित रूप से जुड़े होते हैं, जैसे कि वे भेजे गए समय का टाइमस्टैम्प। इन्हें *एनोटेशन* कहा जाता है। सभी संदेश एनोटेशन देखने के लिए निम्नलिखित कमांड का उपयोग करें: + + ```sh + az iot hub monitor-events --properties anno --hub-name + ``` + + `` को उस नाम से बदलें जिसे आपने अपने IoT Hub के लिए उपयोग किया था। + + जैसे ही आपका IoT डिवाइस संदेश भेजता है, आपको कंसोल आउटपुट में संदेश दिखाई देंगे। + + ```output + Starting event monitor, use ctrl-c to stop... + { + "event": { + "origin": "soil-moisture-sensor", + "module": "", + "interface": "", + "component": "", + "properties": {}, + "annotations": { + "iothub-connection-device-id": "soil-moisture-sensor", + "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}", + "iothub-connection-auth-generation-id": "637553997165220462", + "iothub-enqueuedtime": 1619976150288, + "iothub-message-source": "Telemetry", + "x-opt-sequence-number": 1379, + "x-opt-offset": "550576", + "x-opt-enqueued-time": 1619976150277 + }, + "payload": "{\"soil_moisture\": 381}" + } + } + ``` + + एनोटेशन में समय मान [UNIX समय](https://wikipedia.org/wiki/Unix_time) में होते हैं, जो 1 जनवरी 1970 की मध्यरात्रि से सेकंड की संख्या का प्रतिनिधित्व करते हैं। + + जब आप समाप्त कर लें तो घटना मॉनिटर से बाहर निकलें। + +### कार्य - अपने IoT डिवाइस को नियंत्रित करें + +आप Azure CLI का उपयोग करके अपने IoT डिवाइस पर डायरेक्ट मेथड कॉल कर सकते हैं। + +1. अपने IoT डिवाइस पर `relay_on` मेथड को कॉल करने के लिए अपने कमांड प्रॉम्प्ट या टर्मिनल में निम्नलिखित कमांड चलाएं: + + ```sh + az iot hub invoke-device-method --device-id soil-moisture-sensor \ + --method-name relay_on \ + --method-payload '{}' \ + --hub-name + ``` + + ` + +` के साथ अपने IoT Hub का नाम बदलें। + +यह `method-name` द्वारा निर्दिष्ट विधि के लिए एक डायरेक्ट मेथड अनुरोध भेजता है। डायरेक्ट मेथड्स एक पेलोड ले सकते हैं जिसमें विधि के लिए डेटा होता है, और इसे `method-payload` पैरामीटर में JSON के रूप में निर्दिष्ट किया जा सकता है। + +आप देखेंगे कि रिले चालू हो जाएगा, और आपके IoT डिवाइस से संबंधित आउटपुट दिखाई देगा: + +```output + Direct method received - relay_on + ``` + +1. उपरोक्त चरण को दोहराएं, लेकिन `--method-name` को `relay_off` पर सेट करें। आप देखेंगे कि रिले बंद हो जाएगा और IoT डिवाइस से संबंधित आउटपुट दिखाई देगा। + +--- + +## 🚀 चुनौती + +IoT Hub का मुफ्त टियर एक दिन में 8,000 संदेशों की अनुमति देता है। आपने जो कोड लिखा है, वह हर 10 सेकंड में टेलीमेट्री संदेश भेजता है। हर 10 सेकंड में एक संदेश भेजने पर एक दिन में कितने संदेश होंगे? + +सोचें कि मिट्टी की नमी के माप कितनी बार भेजे जाने चाहिए? आप अपने कोड को मुफ्त टियर के भीतर रहने और जितनी बार आवश्यक हो उतनी बार जांचने के लिए, लेकिन बहुत बार नहीं, कैसे बदल सकते हैं? अगर आप एक दूसरा डिवाइस जोड़ना चाहते हैं तो क्या होगा? + +## व्याख्यान के बाद का क्विज़ + +[व्याख्यान के बाद का क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/16) + +## समीक्षा और स्व-अध्ययन + +IoT Hub SDK Arduino और Python दोनों के लिए ओपन सोर्स है। GitHub पर कोड रिपॉजिटरी में कई नमूने हैं जो दिखाते हैं कि विभिन्न IoT Hub सुविधाओं के साथ कैसे काम किया जाए। + +* यदि आप Wio Terminal का उपयोग कर रहे हैं, तो [GitHub पर Arduino के नमूने](https://github.com/Azure/azure-iot-pal-arduino/tree/master/pal/samples) देखें। +* यदि आप Raspberry Pi या वर्चुअल डिवाइस का उपयोग कर रहे हैं, तो [GitHub पर Python के नमूने](https://github.com/Azure/azure-iot-sdk-python/tree/master/azure-iot-hub/samples) देखें। + +## असाइनमेंट + +[क्लाउड सेवाओं के बारे में जानें](assignment.md) + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/assignment.md b/translations/hi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/assignment.md new file mode 100644 index 00000000..2076275d --- /dev/null +++ b/translations/hi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/assignment.md @@ -0,0 +1,31 @@ + +# क्लाउड सेवाओं के बारे में जानें + +## निर्देश + +क्लाउड, जैसे Microsoft का Azure, केवल किराए पर कंप्यूट्स देने से अधिक प्रदान करता है। क्लाउड सेवाओं के मुख्य प्रकार निम्नलिखित हैं: + +* इंफ्रास्ट्रक्चर ऐज़ ए सर्विस (IaaS) +* प्लेटफॉर्म ऐज़ ए सर्विस (PaaS) +* सर्वरलेस +* सॉफ्टवेयर ऐज़ ए सर्विस (SaaS) + +इन विभिन्न प्रकार की सेवाओं के बारे में जानें और समझाएं कि वे क्या हैं और एक-दूसरे से कैसे अलग हैं। यह भी समझाएं कि कौन सी सेवाएं IoT डेवलपर्स के लिए प्रासंगिक हैं। + +## मूल्यांकन मानदंड + +| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | +| ------- | -------- | -------- | ------------------ | +| विभिन्न क्लाउड सेवाओं की व्याख्या करें | सभी 4 प्रकार की सेवाओं की स्पष्ट व्याख्या दी | 3 प्रकार की सेवाओं की व्याख्या करने में सक्षम | केवल 1 या 2 प्रकार की सेवाओं की व्याख्या करने में सक्षम | +| कौन सी सेवा IoT के लिए प्रासंगिक है, समझाएं | IoT डेवलपर्स के लिए कौन सी सेवाएं प्रासंगिक हैं और क्यों, इसका विवरण दिया | IoT डेवलपर्स के लिए कौन सी सेवाएं प्रासंगिक हैं, इसका विवरण दिया लेकिन कारण नहीं बताया | IoT डेवलपर्स के लिए कौन सी सेवाएं प्रासंगिक हैं, इसका विवरण देने में असमर्थ | + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/single-board-computer-connect-hub.md b/translations/hi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/single-board-computer-connect-hub.md new file mode 100644 index 00000000..d00d5c59 --- /dev/null +++ b/translations/hi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/single-board-computer-connect-hub.md @@ -0,0 +1,128 @@ + +# अपने IoT डिवाइस को क्लाउड से कनेक्ट करें - वर्चुअल IoT हार्डवेयर और रास्पबेरी पाई + +इस पाठ के इस भाग में, आप अपने वर्चुअल IoT डिवाइस या रास्पबेरी पाई को IoT हब से कनेक्ट करेंगे, ताकि टेलीमेट्री भेज सकें और कमांड प्राप्त कर सकें। + +## अपने डिवाइस को IoT हब से कनेक्ट करें + +अगला कदम है अपने डिवाइस को IoT हब से कनेक्ट करना। + +### कार्य - IoT हब से कनेक्ट करें + +1. VS Code में `soil-moisture-sensor` फ़ोल्डर खोलें। सुनिश्चित करें कि यदि आप वर्चुअल IoT डिवाइस का उपयोग कर रहे हैं तो टर्मिनल में वर्चुअल एनवायरनमेंट चल रहा हो। + +1. कुछ अतिरिक्त Pip पैकेज इंस्टॉल करें: + + ```sh + pip3 install azure-iot-device + ``` + + `azure-iot-device` एक लाइब्रेरी है जो आपके IoT हब से संवाद करने के लिए उपयोग होती है। + +1. निम्नलिखित इम्पोर्ट्स को `app.py` फ़ाइल के शीर्ष पर, मौजूदा इम्पोर्ट्स के नीचे जोड़ें: + + ```python + from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse + ``` + + यह कोड आपके IoT हब से संवाद करने के लिए SDK को इम्पोर्ट करता है। + +1. `import paho.mqtt.client as mqtt` लाइन को हटा दें क्योंकि अब इस लाइब्रेरी की आवश्यकता नहीं है। सभी MQTT कोड, जिसमें टॉपिक नाम, `mqtt_client` का उपयोग करने वाला कोड और `handle_command` शामिल हैं, हटा दें। `while True:` लूप को रखें, बस इस लूप से `mqtt_client.publish` लाइन को हटा दें। + +1. इम्पोर्ट स्टेटमेंट्स के नीचे निम्नलिखित कोड जोड़ें: + + ```python + connection_string = "" + ``` + + `` को उस कनेक्शन स्ट्रिंग से बदलें जिसे आपने इस पाठ में पहले डिवाइस के लिए प्राप्त किया था। + + > 💁 यह सबसे अच्छा तरीका नहीं है। कनेक्शन स्ट्रिंग्स को कभी भी सोर्स कोड में स्टोर नहीं करना चाहिए, क्योंकि इसे सोर्स कोड कंट्रोल में चेक किया जा सकता है और कोई भी इसे देख सकता है। हम इसे यहां सरलता के लिए कर रहे हैं। आदर्श रूप से आपको कुछ ऐसा उपयोग करना चाहिए जैसे एनवायरनमेंट वेरिएबल और [`python-dotenv`](https://pypi.org/project/python-dotenv/) जैसा टूल। आप इसके बारे में आगामी पाठ में अधिक जानेंगे। + +1. इस कोड के नीचे, निम्नलिखित को जोड़ें ताकि एक डिवाइस क्लाइंट ऑब्जेक्ट बनाया जा सके जो IoT हब से संवाद कर सके, और इसे कनेक्ट करें: + + ```python + device_client = IoTHubDeviceClient.create_from_connection_string(connection_string) + + print('Connecting') + device_client.connect() + print('Connected') + ``` + +1. इस कोड को चलाएं। आप देखेंगे कि आपका डिवाइस कनेक्ट हो गया है। + + ```output + pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py + Connecting + Connected + Soil moisture: 379 + ``` + +## टेलीमेट्री भेजें + +अब जब आपका डिवाइस कनेक्ट हो गया है, तो आप MQTT ब्रॉकर के बजाय IoT हब को टेलीमेट्री भेज सकते हैं। + +### कार्य - टेलीमेट्री भेजें + +1. निम्नलिखित कोड को `while True` लूप के अंदर, स्लीप से ठीक पहले जोड़ें: + + ```python + message = Message(json.dumps({ 'soil_moisture': soil_moisture })) + device_client.send_message(message) + ``` + + यह कोड एक IoT हब `Message` बनाता है जिसमें मिट्टी की नमी की रीडिंग JSON स्ट्रिंग के रूप में होती है, और इसे डिवाइस से क्लाउड संदेश के रूप में IoT हब को भेजता है। + +## कमांड हैंडल करें + +आपके डिवाइस को सर्वर कोड से एक कमांड हैंडल करने की आवश्यकता है ताकि रिले को नियंत्रित किया जा सके। यह एक डायरेक्ट मेथड रिक्वेस्ट के रूप में भेजा जाता है। + +## कार्य - डायरेक्ट मेथड रिक्वेस्ट हैंडल करें + +1. `while True` लूप से पहले निम्नलिखित कोड जोड़ें: + + ```python + def handle_method_request(request): + print("Direct method received - ", request.name) + + if request.name == "relay_on": + relay.on() + elif request.name == "relay_off": + relay.off() + ``` + + यह एक मेथड, `handle_method_request`, को परिभाषित करता है जिसे तब कॉल किया जाएगा जब IoT हब द्वारा एक डायरेक्ट मेथड कॉल किया जाएगा। प्रत्येक डायरेक्ट मेथड का एक नाम होता है, और यह कोड एक मेथड को अपेक्षित करता है जिसे `relay_on` कहा जाता है ताकि रिले को चालू किया जा सके, और `relay_off` ताकि रिले को बंद किया जा सके। + + > 💁 इसे एक ही डायरेक्ट मेथड रिक्वेस्ट में भी लागू किया जा सकता है, जिसमें रिले की इच्छित स्थिति को एक पेलोड में पास किया जा सकता है जिसे मेथड रिक्वेस्ट के साथ पास किया जा सकता है और `request` ऑब्जेक्ट से उपलब्ध कराया जा सकता है। + +1. डायरेक्ट मेथड्स को एक प्रतिक्रिया की आवश्यकता होती है ताकि कॉलिंग कोड को बताया जा सके कि उन्हें हैंडल किया गया है। `handle_method_request` फंक्शन के अंत में निम्नलिखित कोड जोड़ें ताकि रिक्वेस्ट के लिए एक प्रतिक्रिया बनाई जा सके: + + ```python + method_response = MethodResponse.create_from_method_request(request, 200) + device_client.send_method_response(method_response) + ``` + + यह कोड डायरेक्ट मेथड रिक्वेस्ट को HTTP स्टेटस कोड 200 के साथ प्रतिक्रिया भेजता है, और इसे IoT हब को वापस भेजता है। + +1. इस फंक्शन डिफिनिशन के नीचे निम्नलिखित कोड जोड़ें: + + ```python + device_client.on_method_request_received = handle_method_request + ``` + + यह कोड IoT हब क्लाइंट को बताता है कि जब एक डायरेक्ट मेथड कॉल किया जाए तो `handle_method_request` फंक्शन को कॉल करें। + +> 💁 आप इस कोड को [code/pi](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/pi) या [code/virtual-device](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/virtual-device) फ़ोल्डर में पा सकते हैं। + +😀 आपका मिट्टी की नमी सेंसर प्रोग्राम IoT हब से कनेक्ट हो गया है! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/wio-terminal-connect-hub.md b/translations/hi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/wio-terminal-connect-hub.md new file mode 100644 index 00000000..9cfc0dde --- /dev/null +++ b/translations/hi/2-farm/lessons/4-migrate-your-plant-to-the-cloud/wio-terminal-connect-hub.md @@ -0,0 +1,304 @@ + +# अपने IoT डिवाइस को क्लाउड से कनेक्ट करें - Wio Terminal + +इस पाठ के इस भाग में, आप अपने Wio Terminal को IoT Hub से कनेक्ट करेंगे, ताकि टेलीमेट्री भेज सकें और कमांड प्राप्त कर सकें। + +## अपने डिवाइस को IoT Hub से कनेक्ट करें + +अगला कदम है अपने डिवाइस को IoT Hub से कनेक्ट करना। + +### कार्य - IoT Hub से कनेक्ट करें + +1. VS Code में `soil-moisture-sensor` प्रोजेक्ट खोलें। + +1. `platformio.ini` फाइल खोलें। `knolleary/PubSubClient` लाइब्रेरी डिपेंडेंसी को हटा दें। यह पब्लिक MQTT ब्रॉकर से कनेक्ट करने के लिए उपयोग की जाती थी, और IoT Hub से कनेक्ट करने के लिए आवश्यक नहीं है। + +1. निम्नलिखित लाइब्रेरी डिपेंडेंसी जोड़ें: + + ```ini + seeed-studio/Seeed Arduino RTC @ 2.0.0 + arduino-libraries/AzureIoTHub @ 1.6.0 + azure/AzureIoTUtility @ 1.6.1 + azure/AzureIoTProtocol_MQTT @ 1.6.0 + azure/AzureIoTProtocol_HTTP @ 1.6.0 + azure/AzureIoTSocket_WiFi @ 1.0.2 + ``` + + `Seeed Arduino RTC` लाइब्रेरी Wio Terminal में रियल-टाइम क्लॉक के साथ इंटरैक्ट करने के लिए कोड प्रदान करती है, जिसका उपयोग समय को ट्रैक करने के लिए किया जाता है। बाकी लाइब्रेरी आपके IoT डिवाइस को IoT Hub से कनेक्ट करने की अनुमति देती हैं। + +1. `platformio.ini` फाइल के अंत में निम्नलिखित जोड़ें: + + ```ini + build_flags = + -DDONT_USE_UPLOADTOBLOB + ``` + + यह एक कंपाइलर फ्लैग सेट करता है जो Arduino IoT Hub कोड को कंपाइल करते समय आवश्यक होता है। + +1. `config.h` हेडर फाइल खोलें। सभी MQTT सेटिंग्स को हटा दें और डिवाइस कनेक्शन स्ट्रिंग के लिए निम्नलिखित कॉन्स्टेंट जोड़ें: + + ```cpp + // IoT Hub settings + const char *CONNECTION_STRING = ""; + ``` + + `` को उस कनेक्शन स्ट्रिंग से बदलें जिसे आपने पहले कॉपी किया था। + +1. IoT Hub से कनेक्शन एक समय-आधारित टोकन का उपयोग करता है। इसका मतलब है कि IoT डिवाइस को वर्तमान समय जानना आवश्यक है। Windows, macOS या Linux जैसे ऑपरेटिंग सिस्टम के विपरीत, माइक्रोकंट्रोलर इंटरनेट पर स्वचालित रूप से वर्तमान समय को सिंक्रोनाइज़ नहीं करते। इसका मतलब है कि आपको [NTP](https://wikipedia.org/wiki/Network_Time_Protocol) सर्वर से वर्तमान समय प्राप्त करने के लिए कोड जोड़ना होगा। एक बार समय प्राप्त हो जाने के बाद, इसे Wio Terminal में रियल-टाइम क्लॉक में संग्रहीत किया जा सकता है, जिससे सही समय को बाद में अनुरोध किया जा सकता है, बशर्ते डिवाइस पावर न खोए। `ntp.h` नामक एक नई फाइल बनाएं और निम्नलिखित कोड जोड़ें: + + ```cpp + #pragma once + + #include "DateTime.h" + #include + #include "samd/NTPClientAz.h" + #include + + static void initTime() + { + WiFiUDP _udp; + time_t epochTime = (time_t)-1; + NTPClientAz ntpClient; + + ntpClient.begin(); + + while (true) + { + epochTime = ntpClient.getEpochTime("0.pool.ntp.org"); + + if (epochTime == (time_t)-1) + { + Serial.println("Fetching NTP epoch time failed! Waiting 2 seconds to retry."); + delay(2000); + } + else + { + Serial.print("Fetched NTP epoch time is: "); + + char buff[32]; + sprintf(buff, "%.f", difftime(epochTime, (time_t)0)); + Serial.println(buff); + break; + } + } + + ntpClient.end(); + + struct timeval tv; + tv.tv_sec = epochTime; + tv.tv_usec = 0; + + settimeofday(&tv, NULL); + } + ``` + + इस कोड का विवरण इस पाठ के दायरे से बाहर है। यह एक `initTime` नामक फ़ंक्शन को परिभाषित करता है जो NTP सर्वर से वर्तमान समय प्राप्त करता है और इसे Wio Terminal पर क्लॉक सेट करने के लिए उपयोग करता है। + +1. `main.cpp` फाइल खोलें और सभी MQTT कोड को हटा दें, जिसमें `PubSubClient.h` हेडर फाइल, `PubSubClient` वेरिएबल की घोषणा, `reconnectMQTTClient` और `createMQTTClient` मेथड्स, और इन वेरिएबल्स और मेथड्स के किसी भी कॉल शामिल हैं। इस फाइल में केवल WiFi से कनेक्ट करने, मिट्टी की नमी प्राप्त करने और इसके साथ एक JSON डॉक्यूमेंट बनाने का कोड होना चाहिए। + +1. `main.cpp` फाइल के शीर्ष पर निम्नलिखित `#include` निर्देश जोड़ें ताकि IoT Hub लाइब्रेरी और समय सेट करने के लिए हेडर फाइल्स को शामिल किया जा सके: + + ```cpp + #include + #include + #include + #include "ntp.h" + ``` + +1. `setup` फ़ंक्शन के अंत में निम्नलिखित कॉल जोड़ें ताकि वर्तमान समय सेट किया जा सके: + + ```cpp + initTime(); + ``` + +1. फाइल के शीर्ष पर, `include` निर्देशों के ठीक नीचे निम्नलिखित वेरिएबल घोषणा जोड़ें: + + ```cpp + IOTHUB_DEVICE_CLIENT_LL_HANDLE _device_ll_handle; + ``` + + यह एक `IOTHUB_DEVICE_CLIENT_LL_HANDLE` घोषित करता है, जो IoT Hub से कनेक्शन का एक हैंडल है। + +1. इसके नीचे निम्नलिखित कोड जोड़ें: + + ```cpp + static void connectionStatusCallback(IOTHUB_CLIENT_CONNECTION_STATUS result, IOTHUB_CLIENT_CONNECTION_STATUS_REASON reason, void *user_context) + { + if (result == IOTHUB_CLIENT_CONNECTION_AUTHENTICATED) + { + Serial.println("The device client is connected to iothub"); + } + else + { + Serial.println("The device client has been disconnected"); + } + } + ``` + + यह एक कॉलबैक फ़ंक्शन घोषित करता है जिसे IoT Hub से कनेक्शन की स्थिति बदलने पर कॉल किया जाएगा, जैसे कनेक्ट करना या डिस्कनेक्ट करना। स्थिति को सीरियल पोर्ट पर भेजा जाता है। + +1. इसके नीचे IoT Hub से कनेक्ट करने के लिए एक फ़ंक्शन जोड़ें: + + ```cpp + void connectIoTHub() + { + IoTHub_Init(); + + _device_ll_handle = IoTHubDeviceClient_LL_CreateFromConnectionString(CONNECTION_STRING, MQTT_Protocol); + + if (_device_ll_handle == NULL) + { + Serial.println("Failure creating Iothub device. Hint: Check your connection string."); + return; + } + + IoTHubDeviceClient_LL_SetConnectionStatusCallback(_device_ll_handle, connectionStatusCallback, NULL); + } + ``` + + यह कोड IoT Hub लाइब्रेरी को इनिशियलाइज़ करता है, फिर `config.h` हेडर फाइल में कनेक्शन स्ट्रिंग का उपयोग करके एक कनेक्शन बनाता है। यह कनेक्शन MQTT पर आधारित है। यदि कनेक्शन विफल होता है, तो इसे सीरियल पोर्ट पर भेजा जाता है - यदि आप इसे आउटपुट में देखते हैं, तो कनेक्शन स्ट्रिंग की जांच करें। अंत में, कनेक्शन स्थिति कॉलबैक सेट किया जाता है। + +1. `setup` फ़ंक्शन में इस फ़ंक्शन को `initTime` कॉल के नीचे कॉल करें: + + ```cpp + connectIoTHub(); + ``` + +1. ठीक उसी तरह जैसे MQTT क्लाइंट के साथ, यह कोड एक सिंगल थ्रेड पर चलता है, इसलिए हब द्वारा भेजे गए और हब को भेजे गए संदेशों को प्रोसेस करने के लिए समय चाहिए। इसे करने के लिए, `loop` फ़ंक्शन के शीर्ष पर निम्नलिखित जोड़ें: + + ```cpp + IoTHubDeviceClient_LL_DoWork(_device_ll_handle); + ``` + +1. इस कोड को बिल्ड और अपलोड करें। आप सीरियल मॉनिटर में कनेक्शन देखेंगे: + + ```output + Connecting to WiFi.. + Connected! + Fetched NTP epoch time is: 1619983687 + Sending telemetry {"soil_moisture":391} + The device client is connected to iothub + ``` + + आउटपुट में आप देख सकते हैं कि NTP समय प्राप्त किया जा रहा है, उसके बाद डिवाइस क्लाइंट कनेक्ट हो रहा है। कनेक्ट होने में कुछ सेकंड लग सकते हैं, इसलिए आप आउटपुट में डिवाइस के कनेक्ट होने के दौरान मिट्टी की नमी देख सकते हैं। + + > 💁 आप NTP के UNIX समय को अधिक पठनीय संस्करण में बदलने के लिए [unixtimestamp.com](https://www.unixtimestamp.com) जैसी वेबसाइट का उपयोग कर सकते हैं। + +## टेलीमेट्री भेजें + +अब जब आपका डिवाइस कनेक्ट हो गया है, तो आप MQTT ब्रॉकर के बजाय IoT Hub को टेलीमेट्री भेज सकते हैं। + +### कार्य - टेलीमेट्री भेजें + +1. `setup` फ़ंक्शन के ऊपर निम्नलिखित फ़ंक्शन जोड़ें: + + ```cpp + void sendTelemetry(const char *telemetry) + { + IOTHUB_MESSAGE_HANDLE message_handle = IoTHubMessage_CreateFromString(telemetry); + IoTHubDeviceClient_LL_SendEventAsync(_device_ll_handle, message_handle, NULL, NULL); + IoTHubMessage_Destroy(message_handle); + } + ``` + + यह कोड एक स्ट्रिंग से IoT Hub संदेश बनाता है जिसे पैरामीटर के रूप में पास किया गया है, इसे हब पर भेजता है, फिर संदेश ऑब्जेक्ट को साफ करता है। + +1. इस कोड को `loop` फ़ंक्शन में कॉल करें, ठीक उस लाइन के बाद जहां टेलीमेट्री सीरियल पोर्ट पर भेजी जाती है: + + ```cpp + sendTelemetry(telemetry.c_str()); + ``` + +## कमांड हैंडल करें + +आपके डिवाइस को रिले को नियंत्रित करने के लिए सर्वर कोड से एक कमांड हैंडल करने की आवश्यकता है। इसे एक डायरेक्ट मेथड रिक्वेस्ट के रूप में भेजा जाता है। + +## कार्य - डायरेक्ट मेथड रिक्वेस्ट हैंडल करें + +1. `connectIoTHub` फ़ंक्शन से पहले निम्नलिखित कोड जोड़ें: + + ```cpp + int directMethodCallback(const char *method_name, const unsigned char *payload, size_t size, unsigned char **response, size_t *response_size, void *userContextCallback) + { + Serial.printf("Direct method received %s\r\n", method_name); + + if (strcmp(method_name, "relay_on") == 0) + { + digitalWrite(PIN_WIRE_SCL, HIGH); + } + else if (strcmp(method_name, "relay_off") == 0) + { + digitalWrite(PIN_WIRE_SCL, LOW); + } + } + ``` + + यह कोड एक कॉलबैक मेथड परिभाषित करता है जिसे IoT Hub लाइब्रेरी डायरेक्ट मेथड रिक्वेस्ट प्राप्त होने पर कॉल कर सकती है। अनुरोधित मेथड `method_name` पैरामीटर में भेजा जाता है। यह फ़ंक्शन सीरियल पोर्ट पर कॉल किए गए मेथड को प्रिंट करता है, फिर मेथड नाम के आधार पर रिले को चालू या बंद करता है। + + > 💁 इसे एक सिंगल डायरेक्ट मेथड रिक्वेस्ट में भी लागू किया जा सकता है, जिसमें रिले की इच्छित स्थिति को एक पेलोड में पास किया जा सकता है जिसे मेथड रिक्वेस्ट के साथ पास किया जा सकता है और `payload` पैरामीटर से उपलब्ध कराया जा सकता है। + +1. `directMethodCallback` फ़ंक्शन के अंत में निम्नलिखित कोड जोड़ें: + + ```cpp + char resultBuff[16]; + sprintf(resultBuff, "{\"Result\":\"\"}"); + *response_size = strlen(resultBuff); + *response = (unsigned char *)malloc(*response_size); + memcpy(*response, resultBuff, *response_size); + + return IOTHUB_CLIENT_OK; + ``` + + डायरेक्ट मेथड रिक्वेस्ट को एक प्रतिक्रिया की आवश्यकता होती है, और प्रतिक्रिया दो भागों में होती है - एक टेक्स्ट के रूप में प्रतिक्रिया और एक रिटर्न कोड। यह कोड निम्नलिखित JSON डॉक्यूमेंट के रूप में एक परिणाम बनाएगा: + + ```JSON + { + "Result": "" + } + ``` + + इसे `response` पैरामीटर में कॉपी किया जाता है, और इस प्रतिक्रिया का आकार `response_size` पैरामीटर में सेट किया जाता है। यह कोड फिर `IOTHUB_CLIENT_OK` लौटाता है ताकि दिखाया जा सके कि मेथड को सही तरीके से हैंडल किया गया। + +1. इस कॉलबैक को `connectIoTHub` फ़ंक्शन के अंत में वायर करें: + + ```cpp + IoTHubClient_LL_SetDeviceMethodCallback(_device_ll_handle, directMethodCallback, NULL); + ``` + +1. `loop` फ़ंक्शन `IoTHubDeviceClient_LL_DoWork` फ़ंक्शन को IoT Hub द्वारा भेजे गए इवेंट्स को प्रोसेस करने के लिए कॉल करेगा। इसे `delay` के कारण केवल हर 10 सेकंड में कॉल किया जाता है, जिसका मतलब है कि डायरेक्ट मेथड केवल हर 10 सेकंड में प्रोसेस किए जाते हैं। इसे अधिक कुशल बनाने के लिए, 10 सेकंड की देरी को कई छोटी देरी के रूप में लागू किया जा सकता है, हर बार `IoTHubDeviceClient_LL_DoWork` को कॉल करते हुए। ऐसा करने के लिए, `loop` फ़ंक्शन के ऊपर निम्नलिखित कोड जोड़ें: + + ```cpp + void work_delay(int delay_time) + { + int current = 0; + do + { + IoTHubDeviceClient_LL_DoWork(_device_ll_handle); + delay(100); + current += 100; + } while (current < delay_time); + } + ``` + + यह कोड बार-बार लूप करेगा, `IoTHubDeviceClient_LL_DoWork` को कॉल करेगा और हर बार 100ms के लिए देरी करेगा। यह जितनी बार आवश्यक हो उतनी बार ऐसा करेगा ताकि `delay_time` पैरामीटर में दिए गए समय के लिए देरी की जा सके। इसका मतलब है कि डिवाइस डायरेक्ट मेथड रिक्वेस्ट को प्रोसेस करने के लिए अधिकतम 100ms तक इंतजार कर रहा है। + +1. `loop` फ़ंक्शन में, `IoTHubDeviceClient_LL_DoWork` को कॉल करने को हटा दें, और `delay(10000)` कॉल को निम्नलिखित से बदलें ताकि इस नए फ़ंक्शन को कॉल किया जा सके: + + ```cpp + work_delay(10000); + ``` + +> 💁 आप इस कोड को [code/wio-terminal](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/wio-terminal) फोल्डर में पा सकते हैं। + +😀 आपका मिट्टी की नमी सेंसर प्रोग्राम आपके IoT Hub से कनेक्ट हो गया है! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/5-migrate-application-to-the-cloud/README.md b/translations/hi/2-farm/lessons/5-migrate-application-to-the-cloud/README.md new file mode 100644 index 00000000..fa4e2c98 --- /dev/null +++ b/translations/hi/2-farm/lessons/5-migrate-application-to-the-cloud/README.md @@ -0,0 +1,654 @@ + +# अपनी एप्लिकेशन लॉजिक को क्लाउड में माइग्रेट करें + +![इस पाठ का स्केच नोट](../../../../../translated_images/lesson-9.dfe99c8e891f48e179724520da9f5794392cf9a625079281ccdcbf09bd85e1b6.hi.jpg) + +> स्केच नोट [नित्या नरसिम्हन](https://github.com/nitya) द्वारा। बड़े संस्करण के लिए छवि पर क्लिक करें। + +यह पाठ [IoT for Beginners Project 2 - Digital Agriculture series](https://youtube.com/playlist?list=PLmsFUfdnGr3yCutmcVg6eAUEfsGiFXgcx) के हिस्से के रूप में [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn) से सिखाया गया था। + +[![अपने IoT डिवाइस को सर्वरलेस कोड से नियंत्रित करें](https://img.youtube.com/vi/VVZDcs5u1_I/0.jpg)](https://youtu.be/VVZDcs5u1_I) + +## प्री-लेक्चर क्विज़ + +[प्री-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/17) + +## परिचय + +पिछले पाठ में, आपने सीखा कि अपने पौधों की मिट्टी की नमी की निगरानी और रिले नियंत्रण को क्लाउड-आधारित IoT सेवा से कैसे जोड़ा जाए। अगला कदम उस सर्वर कोड को क्लाउड में स्थानांतरित करना है जो रिले के समय को नियंत्रित करता है। इस पाठ में, आप सीखेंगे कि इसे सर्वरलेस फंक्शन्स का उपयोग करके कैसे करना है। + +इस पाठ में हम निम्नलिखित विषयों को कवर करेंगे: + +* [सर्वरलेस क्या है?](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) +* [एक सर्वरलेस एप्लिकेशन बनाएं](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) +* [IoT हब इवेंट ट्रिगर बनाएं](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) +* [सर्वरलेस कोड से डायरेक्ट मेथड रिक्वेस्ट भेजें](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) +* [अपने सर्वरलेस कोड को क्लाउड में डिप्लॉय करें](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud) + +## सर्वरलेस क्या है? + +सर्वरलेस, या सर्वरलेस कंप्यूटिंग, छोटे कोड ब्लॉक्स बनाने का तरीका है जो विभिन्न प्रकार की घटनाओं के जवाब में क्लाउड में चलते हैं। जब घटना होती है, तो आपका कोड चलता है और घटना के बारे में डेटा प्राप्त करता है। ये घटनाएं कई स्रोतों से हो सकती हैं, जैसे वेब अनुरोध, किसी कतार में डाले गए संदेश, डेटाबेस में डेटा में परिवर्तन, या IoT डिवाइस द्वारा IoT सेवा को भेजे गए संदेश। + +![IoT सेवा से सर्वरलेस सेवा तक भेजे जा रहे संदेश, जो एक साथ कई फंक्शन्स द्वारा संसाधित किए जा रहे हैं](../../../../../translated_images/iot-messages-to-serverless.0194da1cc0732bb7d0f823aed3fce54735c6b1ad3bf36089804d8aaefc0a774f.hi.png) + +> 💁 यदि आपने पहले डेटाबेस ट्रिगर्स का उपयोग किया है, तो इसे उसी तरह समझ सकते हैं, जैसे कोड किसी घटना जैसे कि पंक्ति डालने पर ट्रिगर होता है। + +![जब कई घटनाएं एक साथ भेजी जाती हैं, तो सर्वरलेस सेवा उन्हें एक साथ चलाने के लिए स्केल करती है](../../../../../translated_images/serverless-scaling.f8c769adf0413fd17be1af4f07ff63016b347e2ff869be6c4abb211f9e93909d.hi.png) + +आपका कोड केवल तब चलता है जब घटना होती है, अन्य समय में आपका कोड सक्रिय नहीं रहता। घटना होती है, आपका कोड लोड होता है और चलता है। यह सर्वरलेस को बहुत स्केलेबल बनाता है - यदि कई घटनाएं एक साथ होती हैं, तो क्लाउड प्रदाता आपके फंक्शन को जितनी बार जरूरत हो उतनी बार एक साथ चलाने के लिए स्केल कर सकता है। इसका नुकसान यह है कि यदि आपको घटनाओं के बीच जानकारी साझा करनी है, तो आपको इसे मेमोरी में स्टोर करने के बजाय किसी डेटाबेस में सहेजना होगा। + +आपका कोड एक फंक्शन के रूप में लिखा जाता है जो घटना के विवरण को एक पैरामीटर के रूप में लेता है। आप इन सर्वरलेस फंक्शन्स को लिखने के लिए कई प्रोग्रामिंग भाषाओं का उपयोग कर सकते हैं। + +> 🎓 सर्वरलेस को फंक्शन्स ऐज़ ए सर्विस (FaaS) भी कहा जाता है क्योंकि प्रत्येक इवेंट ट्रिगर को कोड में एक फंक्शन के रूप में लागू किया जाता है। + +नाम के बावजूद, सर्वरलेस वास्तव में सर्वर का उपयोग करता है। नामकरण इसलिए है क्योंकि एक डेवलपर के रूप में आपको अपने कोड को चलाने के लिए आवश्यक सर्वरों की परवाह नहीं होती, आपको केवल यह परवाह होती है कि आपका कोड घटना के जवाब में चले। क्लाउड प्रदाता के पास एक सर्वरलेस *रनटाइम* होता है जो सर्वर, नेटवर्किंग, स्टोरेज, CPU, मेमोरी और आपके कोड को चलाने के लिए आवश्यक अन्य सभी चीजों को प्रबंधित करता है। इस मॉडल का मतलब है कि आप सेवा के लिए प्रति सर्वर भुगतान नहीं कर सकते, क्योंकि कोई सर्वर नहीं है। इसके बजाय आप अपने कोड के चलने के समय और उपयोग की गई मेमोरी के लिए भुगतान करते हैं। + +> 💰 सर्वरलेस क्लाउड में कोड चलाने के सबसे सस्ते तरीकों में से एक है। उदाहरण के लिए, लेखन के समय, एक क्लाउड प्रदाता आपके सभी सर्वरलेस फंक्शन्स को एक महीने में संयुक्त रूप से 1,000,000 बार चलाने की अनुमति देता है, उसके बाद वे प्रत्येक 1,000,000 निष्पादन के लिए US$0.20 चार्ज करते हैं। जब आपका कोड नहीं चल रहा होता है, तो आप भुगतान नहीं करते। + +IoT डेवलपर के रूप में, सर्वरलेस मॉडल आदर्श है। आप एक फंक्शन लिख सकते हैं जो किसी भी IoT डिवाइस द्वारा आपके क्लाउड-होस्टेड IoT सेवा को भेजे गए संदेशों के जवाब में कॉल किया जाता है। आपका कोड सभी भेजे गए संदेशों को संभालेगा, लेकिन केवल तब चलेगा जब जरूरत हो। + +✅ उस कोड को देखें जो आपने MQTT पर संदेशों को सुनने के लिए सर्वर कोड के रूप में लिखा था। यह क्लाउड में सर्वरलेस का उपयोग करके कैसे चल सकता है? आपको लगता है कि कोड को सर्वरलेस कंप्यूटिंग का समर्थन करने के लिए कैसे बदला जा सकता है? + +> 💁 सर्वरलेस मॉडल अन्य क्लाउड सेवाओं में भी जा रहा है, कोड चलाने के अलावा। उदाहरण के लिए, क्लाउड में सर्वरलेस डेटाबेस उपलब्ध हैं जो सर्वरलेस प्राइसिंग मॉडल का उपयोग करते हैं, जहां आप डेटाबेस के खिलाफ किए गए प्रत्येक अनुरोध के लिए भुगतान करते हैं, जैसे कि क्वेरी या इनसर्ट। आमतौर पर यह मूल्य निर्धारण इस बात पर आधारित होता है कि अनुरोध को सेवा देने के लिए कितना काम किया गया। उदाहरण के लिए, एक प्राथमिक कुंजी के खिलाफ एक पंक्ति का चयन एक जटिल ऑपरेशन की तुलना में कम खर्च होगा जो कई तालिकाओं को जोड़ता है और हजारों पंक्तियों को लौटाता है। + +## एक सर्वरलेस एप्लिकेशन बनाएं + +Microsoft का सर्वरलेस कंप्यूटिंग सेवा Azure Functions कहलाती है। + +![Azure Functions का लोगो](../../../../../translated_images/azure-functions-logo.1cfc8e3204c9c44aaf80fcf406fc8544d80d7f00f8d3e8ed6fed764563e17564.hi.png) + +नीचे दिया गया छोटा वीडियो Azure Functions का अवलोकन प्रदान करता है: + +[![Azure Functions अवलोकन वीडियो](https://img.youtube.com/vi/8-jz5f_JyEQ/0.jpg)](https://www.youtube.com/watch?v=8-jz5f_JyEQ) + +> 🎥 ऊपर दी गई छवि पर क्लिक करें वीडियो देखने के लिए। + +✅ कुछ समय निकालें और [Microsoft Azure Functions दस्तावेज़](https://docs.microsoft.com/azure/azure-functions/functions-overview?WT.mc_id=academic-17441-jabenn) में Azure Functions का अवलोकन पढ़ें। + +Azure Functions लिखने के लिए, आप अपनी पसंद की भाषा में Azure Functions ऐप से शुरू करते हैं। Azure Functions Python, JavaScript, TypeScript, C#, F#, Java, और Powershell को सपोर्ट करता है। इस पाठ में, आप Python में Azure Functions ऐप लिखना सीखेंगे। + +> 💁 Azure Functions कस्टम हैंडलर्स को भी सपोर्ट करता है, जिससे आप अपने फंक्शन्स को किसी भी भाषा में लिख सकते हैं जो HTTP अनुरोधों का समर्थन करती है, जिसमें COBOL जैसी पुरानी भाषाएं भी शामिल हैं। + +Functions ऐप्स में एक या अधिक *ट्रिगर्स* होते हैं - फंक्शन्स जो घटनाओं के जवाब में चलते हैं। आप एक Functions ऐप में कई ट्रिगर्स रख सकते हैं, जो सभी सामान्य कॉन्फ़िगरेशन साझा करते हैं। उदाहरण के लिए, आपके Functions ऐप के कॉन्फ़िगरेशन फ़ाइल में आपके IoT हब का कनेक्शन विवरण हो सकता है, और ऐप के सभी फंक्शन्स इसका उपयोग करके कनेक्ट और घटनाओं को सुन सकते हैं। + +### कार्य - Azure Functions टूलिंग इंस्टॉल करें + +> लेखन के समय, Azure Functions कोड टूल्स Apple Silicon पर Python प्रोजेक्ट्स के साथ पूरी तरह से काम नहीं कर रहे हैं। आपको इसके बजाय Intel-आधारित Mac, Windows PC, या Linux PC का उपयोग करना होगा। + +Azure Functions की एक बड़ी विशेषता यह है कि आप उन्हें लोकली चला सकते हैं। वही रनटाइम जो क्लाउड में उपयोग किया जाता है, आपके कंप्यूटर पर चल सकता है, जिससे आप कोड लिख सकते हैं जो IoT संदेशों का जवाब देता है और इसे लोकली चला सकते हैं। आप घटनाओं को संभालते समय अपने कोड को डिबग भी कर सकते हैं। एक बार जब आप अपने कोड से संतुष्ट हो जाते हैं, तो इसे क्लाउड में डिप्लॉय किया जा सकता है। + +Azure Functions टूलिंग CLI के रूप में उपलब्ध है, जिसे Azure Functions Core Tools कहा जाता है। + +1. [Azure Functions Core Tools दस्तावेज़](https://docs.microsoft.com/azure/azure-functions/functions-run-local?WT.mc_id=academic-17441-jabenn) पर दिए गए निर्देशों का पालन करके Azure Functions कोर टूल्स इंस्टॉल करें। + +1. VS Code के लिए Azure Functions एक्सटेंशन इंस्टॉल करें। यह एक्सटेंशन Azure Functions बनाने, डिबग करने और डिप्लॉय करने के लिए समर्थन प्रदान करता है। [Azure Functions एक्सटेंशन दस्तावेज़](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-azuretools.vscode-azurefunctions) में दिए गए निर्देशों का पालन करके इसे VS Code में इंस्टॉल करें। + +जब आप अपने Azure Functions ऐप को क्लाउड में डिप्लॉय करते हैं, तो इसे एप्लिकेशन फ़ाइलों और लॉग फ़ाइलों जैसी चीजों को स्टोर करने के लिए थोड़ी मात्रा में क्लाउड स्टोरेज का उपयोग करना होता है। जब आप अपने Functions ऐप को लोकली चलाते हैं, तो आपको क्लाउड स्टोरेज से कनेक्ट करना होता है, लेकिन वास्तविक क्लाउड स्टोरेज का उपयोग करने के बजाय, आप एक स्टोरेज एमुलेटर का उपयोग कर सकते हैं जिसे [Azurite](https://github.com/Azure/Azurite) कहा जाता है। यह लोकली चलता है लेकिन क्लाउड स्टोरेज की तरह काम करता है। + +> 🎓 Azure में, Azure Functions द्वारा उपयोग किया जाने वाला स्टोरेज एक Azure Storage Account होता है। ये खाते फ़ाइलें, ब्लॉब्स, तालिकाओं में डेटा या कतारों में डेटा स्टोर कर सकते हैं। आप एक स्टोरेज अकाउंट को कई ऐप्स के बीच साझा कर सकते हैं, जैसे कि एक Functions ऐप और एक वेब ऐप। + +1. Azurite एक Node.js ऐप है, इसलिए आपको Node.js इंस्टॉल करना होगा। आप [Node.js वेबसाइट](https://nodejs.org/) पर डाउनलोड और इंस्टॉल निर्देश पा सकते हैं। यदि आप Mac का उपयोग कर रहे हैं, तो आप इसे [Homebrew](https://formulae.brew.sh/formula/node) से भी इंस्टॉल कर सकते हैं। + +1. निम्नलिखित कमांड का उपयोग करके Azurite इंस्टॉल करें (`npm` एक टूल है जो Node.js इंस्टॉल करते समय इंस्टॉल होता है): + + ```sh + npm install -g azurite + ``` + +1. Azurite के लिए डेटा स्टोर करने के लिए `azurite` नामक एक फ़ोल्डर बनाएं: + + ```sh + mkdir azurite + ``` + +1. Azurite चलाएं, इसे इस नए फ़ोल्डर को पास करते हुए: + + ```sh + azurite --location azurite + ``` + + Azurite स्टोरेज एमुलेटर लॉन्च होगा और लोकल Functions रनटाइम से कनेक्ट करने के लिए तैयार होगा। + + ```output + ➜ ~ azurite --location azurite + Azurite Blob service is starting at http://127.0.0.1:10000 + Azurite Blob service is successfully listening at http://127.0.0.1:10000 + Azurite Queue service is starting at http://127.0.0.1:10001 + Azurite Queue service is successfully listening at http://127.0.0.1:10001 + Azurite Table service is starting at http://127.0.0.1:10002 + Azurite Table service is successfully listening at http://127.0.0.1:10002 + ``` + +### कार्य - एक Azure Functions प्रोजेक्ट बनाएं + +Azure Functions CLI का उपयोग करके एक नया Functions ऐप बनाया जा सकता है। + +1. अपने Functions ऐप के लिए एक फ़ोल्डर बनाएं और उसमें जाएं। इसे `soil-moisture-trigger` नाम दें: + + ```sh + mkdir soil-moisture-trigger + cd soil-moisture-trigger + ``` + +1. इस फ़ोल्डर के अंदर एक Python वर्चुअल एनवायरनमेंट बनाएं: + + ```sh + python3 -m venv .venv + ``` + +1. वर्चुअल एनवायरनमेंट को सक्रिय करें: + + * Windows पर: + * यदि आप Command Prompt या Windows Terminal के माध्यम से Command Prompt का उपयोग कर रहे हैं, तो निम्नलिखित चलाएं: + + ```cmd + .venv\Scripts\activate.bat + ``` + + * यदि आप PowerShell का उपयोग कर रहे हैं, तो निम्नलिखित चलाएं: + + ```powershell + .\.venv\Scripts\Activate.ps1 + ``` + + * macOS या Linux पर, निम्नलिखित चलाएं: + + ```cmd + source ./.venv/bin/activate + ``` + + > 💁 ये कमांड उसी स्थान से चलाए जाने चाहिए जहां आपने वर्चुअल एनवायरनमेंट बनाने का कमांड चलाया था। आपको `.venv` फ़ोल्डर में कभी भी नेविगेट करने की आवश्यकता नहीं होगी, आपको हमेशा सक्रिय करने का कमांड और पैकेज इंस्टॉल करने या कोड चलाने के लिए कमांड उसी फ़ोल्डर से चलाना चाहिए जहां आपने वर्चुअल एनवायरनमेंट बनाया था। + +1. इस फ़ोल्डर में Functions ऐप बनाने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + func init --worker-runtime python soil-moisture-trigger + ``` + + यह वर्तमान फ़ोल्डर के अंदर तीन फ़ाइलें बनाएगा: + + * `host.json` - यह JSON दस्तावेज़ आपके Functions ऐप के लिए सेटिंग्स को शामिल करता है। आपको इन सेटिंग्स को संशोधित करने की आवश्यकता नहीं होगी। + * `local.settings.json` - यह JSON दस्तावेज़ आपके ऐप द्वारा लोकली चलाए जाने पर उपयोग की जाने वाली सेटिंग्स को शामिल करता है, जैसे कि आपके IoT हब के लिए कनेक्शन स्ट्रिंग्स। ये सेटिंग्स केवल लोकल हैं और इन्हें सोर्स कोड कंट्रोल में नहीं जोड़ा जाना चाहिए। जब आप ऐप को क्लाउड में डिप्लॉय करते हैं, तो ये सेटिंग्स डिप्लॉय नहीं होतीं, बल्कि आपकी सेटिंग्स एप्लिकेशन सेटिंग्स से लोड होती हैं। इसे इस पाठ में बाद में कवर किया जाएगा। + * `requirements.txt` - यह एक [Pip requirements फ़ाइल](https://pip.pypa.io/en/stable/user_guide/#requirements-files) है जो आपके Functions ऐप को चलाने के लिए आवश्यक Pip पैकेजों को शामिल करती है। + +1. `local.settings.json` फ़ाइल में उस स्टोरेज अकाउंट के लिए एक सेटिंग होती है जिसे Functions ऐप उपयोग करेगा। यह डिफ़ॉल्ट रूप से खाली सेटिंग होती है, इसलिए इसे सेट करने की आवश्यकता होती है। Azurite लोकल स्टोरेज एमुलेटर से कनेक्ट करने के लिए, इस मान को निम्नलिखित पर सेट करें: + + ```json + "AzureWebJobsStorage": "UseDevelopmentStorage=true", + ``` + +1. आवश्यक Pip पैकेजों को requirements फ़ाइल का उपयोग करके इंस्टॉल करें: + + ```sh + pip install -r requirements.txt + ``` + + > 💁 आवश्यक Pip पैकेजों को इस फ़ाइल में होना चाहिए, ताकि जब Functions ऐप को क्लाउड में डिप्लॉय किया जाए, तो रनटाइम सुनिश्चित कर सके कि यह सही पैकेज इंस्टॉल करता है। + +1. यह सुनिश्चित करने के लिए कि सब कुछ सही ढंग से काम कर रहा है, आप Functions रनटाइम शुरू कर सकते हैं। इसे शुरू करने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + func start + ``` + + आप देखेंगे कि रनटाइम शुरू होता है और रिपोर्ट करता है कि उसे कोई जॉब फंक्शन्स (ट्रिगर्स) नहीं मिले हैं। + + ```output + (.venv) ➜ soil-moisture-trigger func start + Found Python version 3.9.1 (python3). + + Azure Functions Core Tools + Core Tools Version: 3.0.3442 Commit hash: 6bfab24b2743f8421475d996402c398d2fe4a9e0 (64-bit) + Function Runtime Version: 3.0.15417.0 + + [2021-05-05T01:24:46.795Z] No job functions found. + ``` +> ⚠️ यदि आपको फ़ायरवॉल नोटिफिकेशन मिलता है, तो एक्सेस की अनुमति दें क्योंकि `func` एप्लिकेशन को आपके नेटवर्क पर पढ़ने और लिखने की आवश्यकता होती है। +> ⚠️ यदि आप macOS का उपयोग कर रहे हैं, तो आउटपुट में चेतावनियां हो सकती हैं: +> +> ```output + > (.venv) ➜ soil-moisture-trigger func start + > Found Python version 3.9.1 (python3). + > + > Azure Functions Core Tools + > Core Tools Version: 3.0.3442 Commit hash: 6bfab24b2743f8421475d996402c398d2fe4a9e0 (64-bit) + > Function Runtime Version: 3.0.15417.0 + > + > [2021-06-16T08:18:28.315Z] Cannot create directory for shared memory usage: /dev/shm/AzureFunctions + > [2021-06-16T08:18:28.316Z] System.IO.FileSystem: Access to the path '/dev/shm/AzureFunctions' is denied. Operation not permitted. + > [2021-06-16T08:18:30.361Z] No job functions found. + > ``` +> +> जब तक Functions ऐप सही तरीके से शुरू हो और चल रहे फंक्शन्स को सूचीबद्ध करे, आप इन्हें अनदेखा कर सकते हैं। जैसा कि [Microsoft Docs Q&A पर इस प्रश्न](https://docs.microsoft.com/answers/questions/396617/azure-functions-core-tools-error-osx-devshmazurefu.html?WT.mc_id=academic-17441-jabenn) में उल्लेख किया गया है, इसे अनदेखा किया जा सकता है। + +1. `ctrl+c` दबाकर Functions ऐप को बंद करें। + +1. वर्तमान फ़ोल्डर को VS Code में खोलें, या तो VS Code खोलकर इस फ़ोल्डर को खोलें, या निम्नलिखित कमांड चलाकर: + + ```sh + code . + ``` + + VS Code आपके Functions प्रोजेक्ट का पता लगाएगा और एक नोटिफिकेशन दिखाएगा जिसमें लिखा होगा: + + ```output + Detected an Azure Functions Project in folder "soil-moisture-trigger" that may have been created outside of + VS Code. Initialize for optimal use with VS Code? + ``` + + ![नोटिफिकेशन](../../../../../translated_images/vscode-azure-functions-init-notification.bd19b49229963edb5311fb3a79445ea469424759d2917ee2f2eb6f92d65d5086.hi.png) + + इस नोटिफिकेशन से **Yes** चुनें। + +1. सुनिश्चित करें कि VS Code टर्मिनल में Python वर्चुअल एनवायरनमेंट चल रहा है। यदि आवश्यक हो तो इसे समाप्त करें और पुनः प्रारंभ करें। + +## IoT Hub इवेंट ट्रिगर बनाएं + +Functions ऐप आपके सर्वरलेस कोड का शेल है। IoT Hub इवेंट्स का जवाब देने के लिए, आप इस ऐप में एक IoT Hub ट्रिगर जोड़ सकते हैं। यह ट्रिगर उन संदेशों की स्ट्रीम से कनेक्ट करने की आवश्यकता है जो IoT Hub को भेजे जाते हैं और उनका जवाब देते हैं। इन संदेशों की स्ट्रीम प्राप्त करने के लिए, आपके ट्रिगर को IoT Hubs के *इवेंट हब संगत एंडपॉइंट* से कनेक्ट करना होगा। + +IoT Hub एक अन्य Azure सेवा, Azure Event Hubs, पर आधारित है। Event Hubs एक सेवा है जो आपको संदेश भेजने और प्राप्त करने की अनुमति देती है, और IoT Hub इसे IoT डिवाइसों के लिए सुविधाओं के साथ विस्तारित करता है। IoT Hub से संदेश पढ़ने के लिए कनेक्ट करने का तरीका वही है जैसा आप Event Hubs का उपयोग करते समय करेंगे। + +✅ थोड़ा शोध करें: [Azure Event Hubs दस्तावेज़](https://docs.microsoft.com/azure/event-hubs/event-hubs-about?WT.mc_id=academic-17441-jabenn) में Event Hubs का अवलोकन पढ़ें। इसकी बुनियादी सुविधाओं की तुलना IoT Hub से कैसे होती है? + +IoT डिवाइस को IoT Hub से कनेक्ट करने के लिए, इसे एक गुप्त कुंजी का उपयोग करना होगा जो सुनिश्चित करता है कि केवल अनुमत डिवाइस ही कनेक्ट कर सकते हैं। यही बात संदेश पढ़ने के लिए कनेक्ट करने पर भी लागू होती है; आपके कोड को एक कनेक्शन स्ट्रिंग की आवश्यकता होगी जिसमें एक गुप्त कुंजी और IoT Hub का विवरण शामिल होगा। + +> 💁 आपको जो डिफ़ॉल्ट कनेक्शन स्ट्रिंग मिलती है उसमें **iothubowner** अनुमतियां होती हैं, जो इसे उपयोग करने वाले किसी भी कोड को IoT Hub पर पूर्ण अनुमतियां देती हैं। आदर्श रूप से, आपको केवल आवश्यक न्यूनतम स्तर की अनुमतियों के साथ कनेक्ट करना चाहिए। इसे अगले पाठ में कवर किया जाएगा। + +एक बार जब आपका ट्रिगर कनेक्ट हो जाता है, तो IoT Hub को भेजे गए प्रत्येक संदेश के लिए फ़ंक्शन के अंदर का कोड कॉल किया जाएगा, चाहे वह संदेश किस डिवाइस ने भेजा हो। ट्रिगर को संदेश एक पैरामीटर के रूप में पास किया जाएगा। + +### कार्य - इवेंट हब संगत एंडपॉइंट कनेक्शन स्ट्रिंग प्राप्त करें + +1. VS Code टर्मिनल से निम्नलिखित कमांड चलाएं ताकि IoT Hubs इवेंट हब संगत एंडपॉइंट के लिए कनेक्शन स्ट्रिंग प्राप्त हो: + + ```sh + az iot hub connection-string show --default-eventhub \ + --output table \ + --hub-name + ``` + + `` को अपने IoT Hub के नाम से बदलें। + +1. VS Code में `local.settings.json` फ़ाइल खोलें। `Values` सेक्शन के अंदर निम्नलिखित अतिरिक्त मान जोड़ें: + + ```json + "IOT_HUB_CONNECTION_STRING": "" + ``` + + `` को पिछले चरण से प्राप्त मान से बदलें। इसे वैध JSON बनाने के लिए ऊपर की पंक्ति के बाद एक कॉमा जोड़ना होगा। + +### कार्य - इवेंट ट्रिगर बनाएं + +अब आप इवेंट ट्रिगर बनाने के लिए तैयार हैं। + +1. VS Code टर्मिनल से `soil-moisture-trigger` फ़ोल्डर के अंदर निम्नलिखित कमांड चलाएं: + + ```sh + func new --name iot-hub-trigger --template "Azure Event Hub trigger" + ``` + + यह एक नया फ़ंक्शन बनाएगा जिसका नाम `iot-hub-trigger` होगा। ट्रिगर IoT Hub पर इवेंट हब संगत एंडपॉइंट से कनेक्ट करेगा, ताकि आप इवेंट हब ट्रिगर का उपयोग कर सकें। IoT Hub के लिए कोई विशिष्ट ट्रिगर नहीं है। + +यह `soil-moisture-trigger` फ़ोल्डर के अंदर एक फ़ोल्डर बनाएगा जिसका नाम `iot-hub-trigger` होगा, जिसमें यह फ़ंक्शन होगा। इस फ़ोल्डर में निम्नलिखित फाइलें होंगी: + +* `__init__.py` - यह Python कोड फ़ाइल है जिसमें ट्रिगर होता है, और यह फ़ोल्डर को Python मॉड्यूल में बदलने के लिए मानक Python फ़ाइल नाम कन्वेंशन का उपयोग करता है। + + इस फ़ाइल में निम्नलिखित कोड होगा: + + ```python + import logging + + import azure.functions as func + + + def main(event: func.EventHubEvent): + logging.info('Python EventHub trigger processed an event: %s', + event.get_body().decode('utf-8')) + ``` + + ट्रिगर का मुख्य भाग `main` फ़ंक्शन है। यह फ़ंक्शन IoT Hub से आने वाले इवेंट्स के साथ कॉल किया जाता है। इस फ़ंक्शन में `event` नामक एक पैरामीटर होता है जो एक `EventHubEvent` होता है। हर बार जब IoT Hub को संदेश भेजा जाता है, तो यह फ़ंक्शन उस संदेश को `event` के रूप में पास करता है, साथ ही उन गुणों के साथ जो आपने पिछले पाठ में एनोटेशन के रूप में देखे थे। + + इस फ़ंक्शन का मुख्य भाग इवेंट को लॉग करता है। + +* `function.json` - इसमें ट्रिगर के लिए कॉन्फ़िगरेशन होता है। मुख्य कॉन्फ़िगरेशन `bindings` नामक सेक्शन में होता है। बाइंडिंग Azure Functions और अन्य Azure सेवाओं के बीच कनेक्शन के लिए शब्द है। इस फ़ंक्शन में इवेंट हब के लिए एक इनपुट बाइंडिंग है - यह इवेंट हब से कनेक्ट होता है और डेटा प्राप्त करता है। + + > 💁 आप आउटपुट बाइंडिंग भी जोड़ सकते हैं ताकि फ़ंक्शन का आउटपुट किसी अन्य सेवा को भेजा जा सके। उदाहरण के लिए, आप डेटाबेस के लिए एक आउटपुट बाइंडिंग जोड़ सकते हैं और IoT Hub इवेंट को फ़ंक्शन से वापस कर सकते हैं, और यह स्वचालित रूप से डेटाबेस में सम्मिलित हो जाएगा। + + ✅ थोड़ा शोध करें: [Azure Functions ट्रिगर्स और बाइंडिंग्स अवधारणाओं](https://docs.microsoft.com/azure/azure-functions/functions-triggers-bindings?WT.mc_id=academic-17441-jabenn&tabs=python) दस्तावेज़ में बाइंडिंग्स के बारे में पढ़ें। + + `bindings` सेक्शन में बाइंडिंग के लिए कॉन्फ़िगरेशन शामिल है। रुचि के मान हैं: + + * `"type": "eventHubTrigger"` - यह फ़ंक्शन को बताता है कि इसे Event Hub से इवेंट्स सुनने की आवश्यकता है। + * `"name": "events"` - यह Event Hub इवेंट्स के लिए उपयोग करने के लिए पैरामीटर नाम है। यह Python कोड में `main` फ़ंक्शन में पैरामीटर नाम से मेल खाता है। + * `"direction": "in"` - यह एक इनपुट बाइंडिंग है, इवेंट हब से डेटा फ़ंक्शन में आता है। + * `"connection": ""` - यह परिभाषित करता है कि कनेक्शन स्ट्रिंग को पढ़ने के लिए किस सेटिंग का उपयोग करना है। स्थानीय रूप से चलाने पर, यह `local.settings.json` फ़ाइल से इस सेटिंग को पढ़ेगा। + + > 💁 कनेक्शन स्ट्रिंग को `function.json` फ़ाइल में संग्रहीत नहीं किया जा सकता है, इसे सेटिंग्स से पढ़ा जाना चाहिए। ऐसा इसलिए है ताकि आप गलती से अपनी कनेक्शन स्ट्रिंग को उजागर न करें। + +1. [Azure Functions टेम्पलेट में एक बग](https://github.com/Azure/azure-functions-templates/issues/1250) के कारण, `function.json` में `cardinality` फ़ील्ड के लिए एक गलत मान है। इस फ़ील्ड को `many` से `one` में अपडेट करें: + + ```json + "cardinality": "one", + ``` + +1. `function.json` फ़ाइल में `"connection"` के मान को अपडेट करें ताकि यह `local.settings.json` फ़ाइल में जोड़े गए नए मान की ओर इशारा करे: + + ```json + "connection": "IOT_HUB_CONNECTION_STRING", + ``` + + > 💁 याद रखें - इसे सेटिंग की ओर इशारा करना चाहिए, इसमें वास्तविक कनेक्शन स्ट्रिंग नहीं होनी चाहिए। + +1. कनेक्शन स्ट्रिंग में `eventHubName` मान होता है, इसलिए `function.json` फ़ाइल में इसके लिए मान को खाली करना होगा। इस मान को खाली स्ट्रिंग में अपडेट करें: + + ```json + "eventHubName": "", + ``` + +### कार्य - इवेंट ट्रिगर चलाएं + +1. सुनिश्चित करें कि आप IoT Hub इवेंट मॉनिटर नहीं चला रहे हैं। यदि यह Functions ऐप के साथ एक ही समय में चल रहा है, तो Functions ऐप कनेक्ट नहीं कर पाएगा और इवेंट्स का उपभोग नहीं कर पाएगा। + + > 💁 कई ऐप्स IoT Hub एंडपॉइंट्स से विभिन्न *कंज्यूमर ग्रुप्स* का उपयोग करके कनेक्ट कर सकते हैं। इन्हें बाद के पाठ में कवर किया जाएगा। + +1. Functions ऐप चलाने के लिए, VS Code टर्मिनल से निम्नलिखित कमांड चलाएं: + + ```sh + func start + ``` + + Functions ऐप शुरू हो जाएगा, और `iot-hub-trigger` फ़ंक्शन का पता लगाएगा। यह पिछले दिन में IoT Hub को भेजे गए किसी भी इवेंट को प्रोसेस करेगा। + + ```output + (.venv) ➜ soil-moisture-trigger func start + Found Python version 3.9.1 (python3). + + Azure Functions Core Tools + Core Tools Version: 3.0.3442 Commit hash: 6bfab24b2743f8421475d996402c398d2fe4a9e0 (64-bit) + Function Runtime Version: 3.0.15417.0 + + Functions: + + iot-hub-trigger: eventHubTrigger + + For detailed output, run func with --verbose flag. + [2021-05-05T02:44:07.517Z] Worker process started and initialized. + [2021-05-05T02:44:09.202Z] Executing 'Functions.iot-hub-trigger' (Reason='(null)', Id=802803a5-eae9-4401-a1f4-176631456ce4) + [2021-05-05T02:44:09.205Z] Trigger Details: PartitionId: 0, Offset: 1011240-1011632, EnqueueTimeUtc: 2021-05-04T19:04:04.2030000Z-2021-05-04T19:04:04.3900000Z, SequenceNumber: 2546-2547, Count: 2 + [2021-05-05T02:44:09.352Z] Python EventHub trigger processed an event: {"soil_moisture":628} + [2021-05-05T02:44:09.354Z] Python EventHub trigger processed an event: {"soil_moisture":624} + [2021-05-05T02:44:09.395Z] Executed 'Functions.iot-hub-trigger' (Succeeded, Id=802803a5-eae9-4401-a1f4-176631456ce4, Duration=245ms) + ``` + + प्रत्येक फ़ंक्शन कॉल के लिए आउटपुट में `Executing 'Functions.iot-hub-trigger'`/`Executed 'Functions.iot-hub-trigger'` ब्लॉक होगा, ताकि आप देख सकें कि प्रत्येक फ़ंक्शन कॉल में कितने संदेश प्रोसेस किए गए। + +1. सुनिश्चित करें कि आपका IoT डिवाइस चल रहा है। आप Functions ऐप में नए मिट्टी की नमी के संदेश देखेंगे। + +1. Functions ऐप को बंद करें और पुनः प्रारंभ करें। आप देखेंगे कि यह पिछले संदेशों को फिर से प्रोसेस नहीं करेगा, यह केवल नए संदेशों को प्रोसेस करेगा। + +> 💁 VS Code आपके Functions को डिबग करने का समर्थन करता है। आप कोड की प्रत्येक पंक्ति की शुरुआत में क्लिक करके ब्रेक पॉइंट सेट कर सकते हैं, या कोड की एक पंक्ति पर कर्सर रखकर *Run -> Toggle breakpoint* चुन सकते हैं, या `F9` दबा सकते हैं। आप *Run -> Start debugging* चुनकर, `F5` दबाकर, या *Run and debug* पैन का चयन करके और **Start debugging** बटन चुनकर डिबगर लॉन्च कर सकते हैं। ऐसा करके आप प्रोसेस किए जा रहे इवेंट्स का विवरण देख सकते हैं। + +#### समस्या निवारण + +* यदि आपको निम्नलिखित त्रुटि मिलती है: + + ```output + The listener for function 'Functions.iot-hub-trigger' was unable to start. Microsoft.WindowsAzure.Storage: Connection refused. System.Net.Http: Connection refused. System.Private.CoreLib: Connection refused. + ``` + + जांचें कि Azurite चल रहा है और आपने `local.settings.json` फ़ाइल में `AzureWebJobsStorage` को `UseDevelopmentStorage=true` पर सेट किया है। + +* यदि आपको निम्नलिखित त्रुटि मिलती है: + + ```output + System.Private.CoreLib: Exception while executing function: Functions.iot-hub-trigger. System.Private.CoreLib: Result: Failure Exception: AttributeError: 'list' object has no attribute 'get_body' + ``` + + जांचें कि आपने `function.json` फ़ाइल में `cardinality` को `one` पर सेट किया है। + +* यदि आपको निम्नलिखित त्रुटि मिलती है: + + ```output + Azure.Messaging.EventHubs: The path to an Event Hub may be specified as part of the connection string or as a separate value, but not both. Please verify that your connection string does not have the `EntityPath` token if you are passing an explicit Event Hub name. (Parameter 'connectionString'). + ``` + + जांचें कि आपने `function.json` फ़ाइल में `eventHubName` को खाली स्ट्रिंग पर सेट किया है। + +## सर्वरलेस कोड से डायरेक्ट मेथड रिक्वेस्ट भेजें + +अब तक आपका Functions ऐप Event Hub संगत एंडपॉइंट का उपयोग करके IoT Hub से संदेश सुन रहा है। अब आपको IoT डिवाइस को कमांड भेजने की आवश्यकता है। यह IoT Hub से *Registry Manager* के माध्यम से एक अलग कनेक्शन का उपयोग करके किया जाता है। Registry Manager एक उपकरण है जो आपको IoT Hub के साथ पंजीकृत डिवाइसों को देखने और उन डिवाइसों के साथ संवाद करने की अनुमति देता है। आप इसे क्लाउड से डिवाइस संदेश भेजने, डायरेक्ट मेथड रिक्वेस्ट भेजने, या डिवाइस ट्विन को अपडेट करने के लिए उपयोग कर सकते हैं। आप इसका उपयोग IoT Hub से IoT डिवाइसों को पंजीकृत करने, अपडेट करने या हटाने के लिए भी कर सकते हैं। + +Registry Manager से कनेक्ट करने के लिए, आपको एक कनेक्शन स्ट्रिंग की आवश्यकता होगी। + +### कार्य - Registry Manager कनेक्शन स्ट्रिंग प्राप्त करें + +1. कनेक्शन स्ट्रिंग प्राप्त करने के लिए, निम्नलिखित कमांड चलाएं: + + ```sh + az iot hub connection-string show --policy-name service \ + --output table \ + --hub-name + ``` + + `` को अपने IoT Hub के नाम से बदलें। + + कनेक्शन स्ट्रिंग *ServiceConnect* पॉलिसी के लिए `--policy-name service` पैरामीटर का उपयोग करके अनुरोध की जाती है। जब आप कनेक्शन स्ट्रिंग का अनुरोध करते हैं, तो आप निर्दिष्ट कर सकते हैं कि वह कनेक्शन स्ट्रिंग किन अनुमतियों की अनुमति देगा। ServiceConnect पॉलिसी आपके कोड को कनेक्ट करने और IoT डिवाइसों को संदेश भेजने की अनुमति देती है। + + ✅ थोड़ा शोध करें: [IoT Hub अनुमतियां दस्तावेज़](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-security#iot-hub-permissions?WT.mc_id=academic-17441-jabenn) में विभिन्न पॉलिसियों के बारे में पढ़ें। + +1. VS Code में `local.settings.json` फ़ाइल खोलें। `Values` सेक्शन के अंदर निम्नलिखित अतिरिक्त मान जोड़ें: + + ```json + "REGISTRY_MANAGER_CONNECTION_STRING": "" + ``` + + `` को पिछले चरण से प्राप्त मान से बदलें। इसे वैध JSON बनाने के लिए ऊपर की पंक्ति के बाद एक कॉमा जोड़ना होगा। + +### कार्य - डिवाइस को डायरेक्ट मेथड रिक्वेस्ट भेजें + +1. Registry Manager के लिए SDK एक Pip पैकेज के माध्यम से उपलब्ध है। इस पैकेज पर निर्भरता जोड़ने के लिए `requirements.txt` फ़ाइल में निम्नलिखित पंक्ति जोड़ें: + + ```sh + azure-iot-hub + ``` + +1. सुनिश्चित करें कि VS Code टर्मिनल में वर्चुअल एनवायरनमेंट सक्रिय है, और Pip पैकेज इंस्टॉल करने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + pip install -r requirements.txt + ``` + +1. `__init__.py` फ़ाइल में निम्नलिखित इम्पोर्ट्स जोड़ें: + + ```python + import json + import os + from azure.iot.hub import IoTHubRegistryManager + from azure.iot.hub.models import CloudToDeviceMethod + ``` + + यह कुछ सिस्टम लाइब्रेरीज़ के साथ-साथ Registry Manager के साथ संवाद करने और डायरेक्ट मेथड रिक्वेस्ट भेजने के लिए लाइब्रेरीज़ को इम्पोर्ट करता है। + +1. `main` मेथड के अंदर का कोड हटा दें, लेकिन मेथड को बनाए रखें। + +1. `main` मेथड में निम्नलिखित कोड जोड़ें: + + ```python + body = json.loads(event.get_body().decode('utf-8')) + device_id = event.iothub_metadata['connection-device-id'] + + logging.info(f'Received message: {body} from {device_id}') + ``` + + यह कोड इवेंट के बॉडी को निकालता है जिसमें IoT डिवाइस द्वारा भेजा गया JSON संदेश होता है। + + फिर यह संदेश के साथ पास किए गए एनोटेशन से डिवाइस ID प्राप्त करता है। इवेंट का बॉडी भेजा गया टेलीमेट्री संदेश होता है, और `iothub_metadata` डिक्शनरी में IoT Hub द्वारा सेट किए गए गुण होते हैं जैसे कि भेजने वाले डिवाइस का ID और संदेश भेजे जाने का समय। + + यह जानकारी लॉग की जाती है। जब आप Functions ऐप को स्थानीय रूप से चलाते हैं तो आप टर्मिनल में यह लॉगिंग देखेंगे। + +1. इसके नीचे निम्नलिखित कोड जोड़ें: + + ```python + soil_moisture = body['soil_moisture'] + + if soil_moisture > 450: + direct_method = CloudToDeviceMethod(method_name='relay_on', payload='{}') + else: + direct_method = CloudToDeviceMethod(method_name='relay_off', payload='{}') + ``` + + यह कोड संदेश से मिट्टी की नमी प्राप्त करता है। फिर मिट्टी की नमी की जांच करता है, और मान के आधार पर `relay_on` या `relay_off` डायरेक्ट मेथड रिक्वेस्ट के लिए एक हेल्पर क्लास बनाता है। मेथड रिक्वेस्ट को किसी पेलोड की आवश्यकता नहीं होती है, इसलिए एक खाली JSON दस्तावेज़ भेजा जाता है। + +1. इसके नीचे निम्नलिखित कोड जोड़ें: + + ```python + logging.info(f'Sending direct method request for {direct_method.method_name} for device {device_id}') + + registry_manager_connection_string = os.environ['REGISTRY_MANAGER_CONNECTION_STRING'] + registry_manager = IoTHubRegistryManager(registry_manager_connection_string) + ``` +यह कोड `local.settings.json` फ़ाइल से `REGISTRY_MANAGER_CONNECTION_STRING` को लोड करता है। इस फ़ाइल में मौजूद मान पर्यावरण चर के रूप में उपलब्ध होते हैं, और इन्हें `os.environ` फ़ंक्शन का उपयोग करके पढ़ा जा सकता है, जो सभी पर्यावरण चर का एक डिक्शनरी लौटाता है। + +> 💁 जब यह कोड क्लाउड में डिप्लॉय किया जाता है, तो `local.settings.json` फ़ाइल में मौजूद मान *Application Settings* के रूप में सेट किए जाते हैं, और इन्हें पर्यावरण चर से पढ़ा जा सकता है। + +इसके बाद कोड कनेक्शन स्ट्रिंग का उपयोग करके Registry Manager हेल्पर क्लास का एक इंस्टेंस बनाता है। + +1. इसके नीचे निम्नलिखित कोड जोड़ें: + + ```python + registry_manager.invoke_device_method(device_id, direct_method) + + logging.info('Direct method request sent!') + ``` + + यह कोड रजिस्ट्री मैनेजर को उस डिवाइस को डायरेक्ट मेथड रिक्वेस्ट भेजने के लिए कहता है जिसने टेलीमेट्री भेजी है। + + > 💁 पहले के पाठों में आपने MQTT का उपयोग करके जो ऐप बनाए थे, उनमें रिले कंट्रोल कमांड सभी डिवाइसों को भेजे जाते थे। कोड ने यह मान लिया था कि आपके पास केवल एक डिवाइस होगा। इस संस्करण में कोड एक ही डिवाइस को मेथड रिक्वेस्ट भेजता है, इसलिए यह कई सेटअप्स के साथ काम करेगा, जैसे कि नमी सेंसर और रिले, और सही डिवाइस को सही डायरेक्ट मेथड रिक्वेस्ट भेजेगा। + +1. Functions ऐप चलाएं और सुनिश्चित करें कि आपका IoT डिवाइस डेटा भेज रहा है। आप देखेंगे कि संदेश प्रोसेस हो रहे हैं और डायरेक्ट मेथड रिक्वेस्ट भेजे जा रहे हैं। मिट्टी में नमी सेंसर को अंदर और बाहर ले जाकर मान बदलते हुए देखें और रिले को चालू और बंद होते हुए देखें। + +> 💁 आप इस कोड को [code/functions](../../../../../2-farm/lessons/5-migrate-application-to-the-cloud/code/functions) फ़ोल्डर में पा सकते हैं। + +## अपने सर्वरलेस कोड को क्लाउड में डिप्लॉय करें + +आपका कोड अब लोकल पर काम कर रहा है, तो अगला कदम Functions ऐप को क्लाउड में डिप्लॉय करना है। + +### कार्य - क्लाउड संसाधन बनाएं + +आपके Functions ऐप को Azure में Functions App संसाधन में डिप्लॉय करने की आवश्यकता है, जो आपके IoT Hub के लिए बनाए गए Resource Group के अंदर होगा। आपको Azure में एक Storage Account भी बनाना होगा ताकि लोकल पर चल रहे इम्यूलेटेड स्टोरेज को बदला जा सके। + +1. स्टोरेज अकाउंट बनाने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + az storage account create --resource-group soil-moisture-sensor \ + --sku Standard_LRS \ + --name + ``` + + `` को अपने स्टोरेज अकाउंट के लिए एक नाम से बदलें। यह नाम वैश्विक रूप से अद्वितीय होना चाहिए क्योंकि यह स्टोरेज अकाउंट तक पहुंचने के लिए उपयोग किए जाने वाले URL का हिस्सा बनता है। इस नाम में केवल छोटे अक्षर और संख्याएं उपयोग की जा सकती हैं, कोई अन्य वर्ण नहीं, और यह 24 वर्णों तक सीमित है। कुछ ऐसा उपयोग करें जैसे `sms` और अंत में एक अद्वितीय पहचानकर्ता जोड़ें, जैसे कुछ रैंडम शब्द या आपका नाम। + + `--sku Standard_LRS` मूल्य निर्धारण स्तर का चयन करता है, जो सबसे कम लागत वाले सामान्य-उद्देश्य वाले अकाउंट को चुनता है। स्टोरेज का कोई मुफ्त स्तर नहीं है, और आप जो उपयोग करते हैं उसके लिए भुगतान करते हैं। लागत अपेक्षाकृत कम है, सबसे महंगा स्टोरेज प्रति गीगाबाइट प्रति माह US$0.05 से कम है। + + ✅ मूल्य निर्धारण के बारे में [Azure Storage Account pricing page](https://azure.microsoft.com/pricing/details/storage/?WT.mc_id=academic-17441-jabenn) पर पढ़ें। + +1. एक Function App बनाने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + az functionapp create --resource-group soil-moisture-sensor \ + --runtime python \ + --functions-version 3 \ + --os-type Linux \ + --consumption-plan-location \ + --storage-account \ + --name + ``` + + `` को उस स्थान से बदलें जिसे आपने पिछले पाठ में Resource Group बनाते समय उपयोग किया था। + + `` को उस स्टोरेज अकाउंट के नाम से बदलें जिसे आपने पिछले चरण में बनाया था। + + `` को अपने Functions App के लिए एक अद्वितीय नाम से बदलें। यह नाम वैश्विक रूप से अद्वितीय होना चाहिए क्योंकि यह Functions App तक पहुंचने के लिए उपयोग किए जाने वाले URL का हिस्सा बनता है। कुछ ऐसा उपयोग करें जैसे `soil-moisture-sensor-` और अंत में एक अद्वितीय पहचानकर्ता जोड़ें, जैसे कुछ रैंडम शब्द या आपका नाम। + + `--functions-version 3` विकल्प Azure Functions के संस्करण को सेट करता है। संस्करण 3 नवीनतम संस्करण है। + + `--os-type Linux` Functions रनटाइम को इन फंक्शन्स को होस्ट करने के लिए Linux का उपयोग करने के लिए कहता है। Functions को Linux या Windows पर होस्ट किया जा सकता है, उपयोग किए गए प्रोग्रामिंग भाषा के आधार पर। Python ऐप्स केवल Linux पर समर्थित हैं। + +### कार्य - अपने एप्लिकेशन सेटिंग्स अपलोड करें + +जब आपने अपने Functions App को विकसित किया, तो आपने IoT Hub के लिए कनेक्शन स्ट्रिंग्स के लिए `local.settings.json` फ़ाइल में कुछ सेटिंग्स संग्रहीत कीं। इन्हें Azure में आपके Functions App में Application Settings में लिखा जाना चाहिए ताकि आपका कोड इन्हें उपयोग कर सके। + +> 🎓 `local.settings.json` फ़ाइल केवल लोकल विकास सेटिंग्स के लिए है, और इन्हें स्रोत कोड नियंत्रण, जैसे GitHub, में चेक-इन नहीं किया जाना चाहिए। जब क्लाउड में डिप्लॉय किया जाता है, तो Application Settings का उपयोग किया जाता है। Application Settings क्लाउड में होस्ट किए गए key/value जोड़े हैं और इन्हें पर्यावरण चर से पढ़ा जाता है, या तो आपके कोड में या रनटाइम द्वारा जब आपका कोड IoT Hub से कनेक्ट होता है। + +1. Functions App Application Settings में `IOT_HUB_CONNECTION_STRING` सेटिंग सेट करने के लिए निम्नलिखित कमांड चलाएं: + + ```sh + az functionapp config appsettings set --resource-group soil-moisture-sensor \ + --name \ + --settings "IOT_HUB_CONNECTION_STRING=" + ``` + + `` को उस नाम से बदलें जिसे आपने अपने Functions App के लिए उपयोग किया था। + + `` को अपने `local.settings.json` फ़ाइल से `IOT_HUB_CONNECTION_STRING` के मान से बदलें। + +1. ऊपर दिए गए चरण को दोहराएं, लेकिन `REGISTRY_MANAGER_CONNECTION_STRING` के मान को `local.settings.json` फ़ाइल से संबंधित मान से सेट करें। + +जब आप ये कमांड चलाते हैं, तो वे Functions App के लिए सभी Application Settings की सूची भी आउटपुट करेंगे। आप इसका उपयोग यह जांचने के लिए कर सकते हैं कि आपके मान सही तरीके से सेट किए गए हैं। + +> 💁 आप देखेंगे कि `AzureWebJobsStorage` के लिए पहले से ही एक मान सेट है। आपके `local.settings.json` फ़ाइल में, इसे लोकल स्टोरेज इम्यूलेटर का उपयोग करने के लिए सेट किया गया था। जब आपने Functions App बनाया, तो आपने स्टोरेज अकाउंट को एक पैरामीटर के रूप में पास किया, और यह इस सेटिंग में स्वचालित रूप से सेट हो गया। + +### कार्य - अपने Functions App को क्लाउड में डिप्लॉय करें + +अब जब Functions App तैयार है, तो आपका कोड डिप्लॉय किया जा सकता है। + +1. अपने Functions App को प्रकाशित करने के लिए VS Code टर्मिनल से निम्नलिखित कमांड चलाएं: + + ```sh + func azure functionapp publish + ``` + + `` को उस नाम से बदलें जिसे आपने अपने Functions App के लिए उपयोग किया था। + +कोड को पैक किया जाएगा और Functions App को भेजा जाएगा, जहां इसे डिप्लॉय और शुरू किया जाएगा। बहुत सारे कंसोल आउटपुट होंगे, जो डिप्लॉयमेंट की पुष्टि और डिप्लॉय किए गए फंक्शन्स की सूची के साथ समाप्त होंगे। इस मामले में सूची में केवल ट्रिगर शामिल होगा। + +```output +Deployment successful. +Remote build succeeded! +Syncing triggers... +Functions in soil-moisture-sensor: + iot-hub-trigger - [eventHubTrigger] +``` + +सुनिश्चित करें कि आपका IoT डिवाइस चल रहा है। मिट्टी की नमी को समायोजित करके नमी स्तर बदलें, या सेंसर को मिट्टी के अंदर और बाहर ले जाएं। आप देखेंगे कि मिट्टी की नमी बदलते ही रिले चालू और बंद हो रहा है। + +--- + +## 🚀 चुनौती + +पिछले पाठ में, आपने रिले के लिए टाइमिंग को प्रबंधित किया था, जब रिले चालू था और थोड़ी देर बाद बंद हो गया था, तो MQTT संदेशों से अनसब्सक्राइब करके। आप यहां इस विधि का उपयोग नहीं कर सकते - आप अपने IoT Hub ट्रिगर को अनसब्सक्राइब नहीं कर सकते। + +सोचें कि आप अपने Functions App में इसे संभालने के लिए अलग-अलग तरीकों का उपयोग कैसे कर सकते हैं। + +## पोस्ट-लेक्चर क्विज़ + +[पोस्ट-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/18) + +## समीक्षा और स्व-अध्ययन + +* [Serverless Computing page on Wikipedia](https://wikipedia.org/wiki/Serverless_computing) पर सर्वरलेस कंप्यूटिंग के बारे में पढ़ें। +* Azure में सर्वरलेस का उपयोग करने के बारे में और अधिक उदाहरणों सहित [Go serverless for your IoT needs Azure blog post](https://azure.microsoft.com/blog/go-serverless-for-your-iot-needs/?WT.mc_id=academic-17441-jabenn) पर पढ़ें। +* [Azure Functions YouTube channel](https://www.youtube.com/c/AzureFunctions) पर Azure Functions के बारे में अधिक जानें। + +## असाइनमेंट + +[मैनुअल रिले नियंत्रण जोड़ें](assignment.md) + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/5-migrate-application-to-the-cloud/assignment.md b/translations/hi/2-farm/lessons/5-migrate-application-to-the-cloud/assignment.md new file mode 100644 index 00000000..649083fa --- /dev/null +++ b/translations/hi/2-farm/lessons/5-migrate-application-to-the-cloud/assignment.md @@ -0,0 +1,68 @@ + +# मैनुअल रिले नियंत्रण जोड़ें + +## निर्देश + +सर्वरलेस कोड को कई अलग-अलग तरीकों से ट्रिगर किया जा सकता है, जिनमें HTTP अनुरोध शामिल हैं। आप HTTP ट्रिगर्स का उपयोग करके अपने रिले नियंत्रण में मैनुअल ओवरराइड जोड़ सकते हैं, जिससे कोई व्यक्ति वेब अनुरोध के माध्यम से रिले को चालू या बंद कर सके। + +इस असाइनमेंट के लिए, आपको अपने Functions App में दो HTTP ट्रिगर्स जोड़ने की आवश्यकता है ताकि रिले को चालू और बंद किया जा सके। इसके लिए आप इस पाठ में सीखी गई चीज़ों का उपयोग करके डिवाइस को कमांड भेज सकते हैं। + +कुछ सुझाव: + +* आप अपने मौजूदा Functions App में HTTP ट्रिगर निम्नलिखित कमांड का उपयोग करके जोड़ सकते हैं: + + ```sh + func new --name --template "HTTP trigger" + ``` + + `` को अपने HTTP ट्रिगर के नाम से बदलें। जैसे `relay_on` और `relay_off` का उपयोग करें। + +* HTTP ट्रिगर्स में एक्सेस कंट्रोल हो सकता है। डिफ़ॉल्ट रूप से, इन्हें चलाने के लिए URL के साथ एक फ़ंक्शन-विशिष्ट API कुंजी पास करनी होती है। इस असाइनमेंट के लिए, आप इस प्रतिबंध को हटा सकते हैं ताकि कोई भी फ़ंक्शन चला सके। ऐसा करने के लिए, HTTP ट्रिगर्स के लिए `function.json` फ़ाइल में `authLevel` सेटिंग को निम्नलिखित में अपडेट करें: + + ```json + "authLevel": "anonymous" + ``` + + > 💁 आप इस एक्सेस कंट्रोल के बारे में अधिक जानकारी [Function access keys documentation](https://docs.microsoft.com/azure/azure-functions/functions-bindings-http-webhook-trigger?WT.mc_id=academic-17441-jabenn#authorization-keys) में पढ़ सकते हैं। + +* HTTP ट्रिगर्स डिफ़ॉल्ट रूप से GET और POST अनुरोधों का समर्थन करते हैं। इसका मतलब है कि आप उन्हें अपने वेब ब्राउज़र का उपयोग करके कॉल कर सकते हैं - वेब ब्राउज़र GET अनुरोध करते हैं। + + जब आप अपने Functions App को लोकली चलाते हैं, तो आपको ट्रिगर का URL दिखाई देगा: + + ```output + Functions: + + relay_off: [GET,POST] http://localhost:7071/api/relay_off + + relay_on: [GET,POST] http://localhost:7071/api/relay_on + + iot-hub-trigger: eventHubTrigger + ``` + + URL को अपने ब्राउज़र में पेस्ट करें और `return` दबाएं, या VS Code में टर्मिनल विंडो में लिंक पर `Ctrl+click` करें (macOS पर `Cmd+click`) ताकि यह आपके डिफ़ॉल्ट ब्राउज़र में खुले। यह ट्रिगर को चलाएगा। + + > 💁 ध्यान दें कि URL में `/api` शामिल है - HTTP ट्रिगर्स डिफ़ॉल्ट रूप से `api` सबडोमेन में होते हैं। + +* जब आप Functions App को डिप्लॉय करते हैं, तो HTTP ट्रिगर URL इस प्रकार होगा: + + `https://.azurewebsites.net/api/` + + जहां `` आपके Functions App का नाम है, और `` आपके ट्रिगर का नाम है। + +## मूल्यांकन मानदंड + +| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | +| ------- | -------- | -------- | ----------------- | +| HTTP ट्रिगर्स बनाना | रिले को चालू और बंद करने के लिए 2 ट्रिगर्स बनाए, उपयुक्त नामों के साथ | एक ट्रिगर बनाया, उपयुक्त नाम के साथ | कोई ट्रिगर बनाने में असमर्थ | +| HTTP ट्रिगर्स से रिले को नियंत्रित करना | दोनों ट्रिगर्स को IoT Hub से कनेक्ट किया और रिले को सही तरीके से नियंत्रित किया | एक ट्रिगर को IoT Hub से कनेक्ट किया और रिले को सही तरीके से नियंत्रित किया | ट्रिगर्स को IoT Hub से कनेक्ट करने में असमर्थ | + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/6-keep-your-plant-secure/README.md b/translations/hi/2-farm/lessons/6-keep-your-plant-secure/README.md new file mode 100644 index 00000000..e727f139 --- /dev/null +++ b/translations/hi/2-farm/lessons/6-keep-your-plant-secure/README.md @@ -0,0 +1,243 @@ + +# अपने पौधे को सुरक्षित रखें + +![इस पाठ का स्केच नोट](../../../../../translated_images/lesson-10.829c86b80b9403bb770929ee553a1d293afe50dc23121aaf9be144673ae012cc.hi.jpg) + +> स्केच नोट [नित्या नरसिम्हन](https://github.com/nitya) द्वारा। बड़े संस्करण के लिए छवि पर क्लिक करें। + +## प्री-लेक्चर क्विज़ + +[प्री-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/19) + +## परिचय + +पिछले कुछ पाठों में आपने एक मिट्टी निगरानी IoT डिवाइस बनाया और इसे क्लाउड से जोड़ा। लेकिन क्या होगा अगर किसी प्रतिद्वंद्वी किसान के लिए काम करने वाले हैकर्स ने आपके IoT डिवाइस का नियंत्रण अपने हाथ में ले लिया? क्या होगा अगर उन्होंने उच्च मिट्टी की नमी के रीडिंग भेजे ताकि आपके पौधों को कभी पानी न मिले, या आपके सिंचाई सिस्टम को हमेशा चालू रखा, जिससे आपके पौधे अधिक पानी से मर जाएं और आपको पानी के बिल में भारी नुकसान हो? + +इस पाठ में आप IoT डिवाइस को सुरक्षित करने के बारे में जानेंगे। चूंकि यह इस प्रोजेक्ट का अंतिम पाठ है, आप यह भी सीखेंगे कि अपने क्लाउड संसाधनों को कैसे साफ करें, जिससे संभावित लागत कम हो सके। + +इस पाठ में हम कवर करेंगे: + +* [IoT डिवाइस को सुरक्षित क्यों करना आवश्यक है?](../../../../../2-farm/lessons/6-keep-your-plant-secure) +* [क्रिप्टोग्राफी](../../../../../2-farm/lessons/6-keep-your-plant-secure) +* [अपने IoT डिवाइस को सुरक्षित करें](../../../../../2-farm/lessons/6-keep-your-plant-secure) +* [एक X.509 प्रमाणपत्र बनाएं और उपयोग करें](../../../../../2-farm/lessons/6-keep-your-plant-secure) + +> 🗑 यह इस प्रोजेक्ट का अंतिम पाठ है, इसलिए इस पाठ और असाइनमेंट को पूरा करने के बाद, अपने क्लाउड सेवाओं को साफ करना न भूलें। असाइनमेंट पूरा करने के लिए आपको सेवाओं की आवश्यकता होगी, इसलिए पहले इसे पूरा करना सुनिश्चित करें। +> +> यदि आवश्यक हो, तो निर्देशों के लिए [अपने प्रोजेक्ट को साफ करने की गाइड](../../../clean-up.md) देखें। + +## IoT डिवाइस को सुरक्षित क्यों करना आवश्यक है? + +IoT सुरक्षा का मतलब है यह सुनिश्चित करना कि केवल अपेक्षित डिवाइस ही आपके क्लाउड IoT सेवा से कनेक्ट हो सकें और टेलीमेट्री भेज सकें, और केवल आपकी क्लाउड सेवा ही आपके डिवाइस को कमांड भेज सके। IoT डेटा व्यक्तिगत भी हो सकता है, जिसमें चिकित्सा या निजी डेटा शामिल हो सकता है, इसलिए आपके पूरे एप्लिकेशन को इस डेटा के लीक होने से रोकने के लिए सुरक्षा पर विचार करना चाहिए। + +यदि आपका IoT एप्लिकेशन सुरक्षित नहीं है, तो कई जोखिम हो सकते हैं: + +* एक नकली डिवाइस गलत डेटा भेज सकता है, जिससे आपका एप्लिकेशन गलत तरीके से प्रतिक्रिया कर सकता है। उदाहरण के लिए, वे लगातार उच्च मिट्टी की नमी के रीडिंग भेज सकते हैं, जिससे आपका सिंचाई सिस्टम कभी चालू न हो और आपके पौधे पानी की कमी से मर जाएं। +* अनधिकृत उपयोगकर्ता IoT डिवाइस से डेटा पढ़ सकते हैं, जिसमें व्यक्तिगत या व्यवसायिक रूप से महत्वपूर्ण डेटा शामिल हो सकता है। +* हैकर्स डिवाइस को इस तरह से नियंत्रित करने के लिए कमांड भेज सकते हैं, जिससे डिवाइस या जुड़े हार्डवेयर को नुकसान हो सकता है। +* IoT डिवाइस से कनेक्ट करके, हैकर्स अतिरिक्त नेटवर्क तक पहुंच सकते हैं और निजी सिस्टम तक पहुंच प्राप्त कर सकते हैं। +* दुर्भावनापूर्ण उपयोगकर्ता व्यक्तिगत डेटा तक पहुंच सकते हैं और इसे ब्लैकमेल के लिए उपयोग कर सकते हैं। + +ये वास्तविक दुनिया के परिदृश्य हैं और अक्सर होते रहते हैं। कुछ उदाहरण पहले के पाठों में दिए गए थे, लेकिन यहां कुछ और हैं: + +* 2018 में, हैकर्स ने एक मछली टैंक थर्मोस्टेट पर खुले वाईफाई एक्सेस पॉइंट का उपयोग करके एक कैसीनो के नेटवर्क तक पहुंच प्राप्त की और डेटा चुरा लिया। [The Hacker News - Casino Gets Hacked Through Its Internet-Connected Fish Tank Thermometer](https://thehackernews.com/2018/04/iot-hacking-thermometer.html) +* 2016 में, मिराई बॉटनेट ने Dyn, एक इंटरनेट सेवा प्रदाता, के खिलाफ एक डिनायल ऑफ सर्विस अटैक लॉन्च किया, जिससे इंटरनेट के बड़े हिस्से ठप हो गए। इस बॉटनेट ने DVRs और कैमरों जैसे IoT डिवाइस का उपयोग किया, जो डिफ़ॉल्ट उपयोगकर्ता नाम और पासवर्ड का उपयोग करते थे। [The Guardian - DDoS attack that disrupted internet was largest of its kind in history, experts say](https://www.theguardian.com/technology/2016/oct/26/ddos-attack-dyn-mirai-botnet) +* Spiral Toys ने अपने CloudPets कनेक्टेड खिलौनों के उपयोगकर्ताओं का डेटाबेस इंटरनेट पर सार्वजनिक रूप से उपलब्ध रखा। [Troy Hunt - Data from connected CloudPets teddy bears leaked and ransomed, exposing kids' voice messages](https://www.troyhunt.com/data-from-connected-cloudpets-teddy-bears-leaked-and-ransomed-exposing-kids-voice-messages/). +* Strava ने धावकों को टैग किया और उनके रूट दिखाए, जिससे अजनबियों को यह पता चल सकता था कि आप कहां रहते हैं। [Kim Komndo - Fitness app could lead a stranger right to your home — change this setting](https://www.komando.com/security-privacy/strava-fitness-app-privacy/755349/). + +✅ शोध करें: IoT हैक्स और IoT डेटा के उल्लंघनों के और उदाहरण खोजें, विशेष रूप से इंटरनेट से जुड़े टूथब्रश या वजन मापने वाले उपकरण जैसे व्यक्तिगत आइटम के साथ। सोचें कि इन हैक्स का पीड़ितों या ग्राहकों पर क्या प्रभाव हो सकता है। + +> 💁 सुरक्षा एक विशाल विषय है, और यह पाठ केवल आपके डिवाइस को क्लाउड से कनेक्ट करने के कुछ बुनियादी पहलुओं को छुएगा। अन्य विषयों में डेटा परिवर्तनों की निगरानी, डिवाइस को सीधे हैक करना, या डिवाइस कॉन्फ़िगरेशन में बदलाव शामिल हैं, जो कवर नहीं किए जाएंगे। IoT हैकिंग एक बड़ा खतरा है, और [Azure Defender for IoT](https://azure.microsoft.com/services/azure-defender-for-iot/?WT.mc_id=academic-17441-jabenn) जैसे उपकरण विकसित किए गए हैं। ये उपकरण आपके कंप्यूटर पर मौजूद एंटी-वायरस और सुरक्षा उपकरणों के समान हैं, लेकिन छोटे, कम पावर वाले IoT डिवाइस के लिए डिज़ाइन किए गए हैं। + +## क्रिप्टोग्राफी + +जब कोई डिवाइस IoT सेवा से कनेक्ट होता है, तो यह खुद को पहचानने के लिए एक आईडी का उपयोग करता है। समस्या यह है कि इस आईडी को क्लोन किया जा सकता है - एक हैकर एक दुर्भावनापूर्ण डिवाइस सेट कर सकता है जो एक असली डिवाइस की तरह ही आईडी का उपयोग करता है लेकिन गलत डेटा भेजता है। + +![सही और दुर्भावनापूर्ण डिवाइस एक ही आईडी का उपयोग करके टेलीमेट्री भेज सकते हैं](../../../../../translated_images/iot-device-and-hacked-device-connecting.e0671675df74d6d99eb1dedb5a670e606f698efa6202b1ad4c8ae548db299cc6.hi.png) + +इस समस्या का समाधान यह है कि भेजे जा रहे डेटा को एक गुप्त प्रारूप में बदल दिया जाए, जिसे केवल डिवाइस और क्लाउड ही जानते हों। इस प्रक्रिया को *एन्क्रिप्शन* कहा जाता है, और डेटा को एन्क्रिप्ट करने के लिए उपयोग किए जाने वाले मान को *एन्क्रिप्शन कुंजी* कहा जाता है। + +![यदि एन्क्रिप्शन का उपयोग किया जाता है, तो केवल एन्क्रिप्टेड संदेश स्वीकार किए जाएंगे, अन्य अस्वीकार कर दिए जाएंगे](../../../../../translated_images/iot-device-and-hacked-device-connecting-encryption.5941aff601fc978f979e46f2849b573564eeb4a4dc5b52f669f62745397492fb.hi.png) + +क्लाउड सेवा तब डेटा को एक पठनीय प्रारूप में बदल सकती है, जिसे *डिक्रिप्शन* कहा जाता है, और यह प्रक्रिया या तो उसी एन्क्रिप्शन कुंजी या एक *डिक्रिप्शन कुंजी* का उपयोग करके की जाती है। यदि एन्क्रिप्टेड संदेश को कुंजी द्वारा डिक्रिप्ट नहीं किया जा सकता है, तो डिवाइस हैक हो गया है और संदेश अस्वीकार कर दिया जाता है। + +एन्क्रिप्शन और डिक्रिप्शन की तकनीक को *क्रिप्टोग्राफी* कहा जाता है। + +### प्रारंभिक क्रिप्टोग्राफी + +सबसे प्रारंभिक प्रकार की क्रिप्टोग्राफी प्रतिस्थापन सिफर थे, जो 3,500 साल पहले के हैं। प्रतिस्थापन सिफर में एक अक्षर को दूसरे अक्षर से बदलना शामिल होता है। उदाहरण के लिए, [सीज़र सिफर](https://wikipedia.org/wiki/Caesar_cipher) में वर्णमाला को एक परिभाषित मात्रा में स्थानांतरित करना शामिल है, और केवल एन्क्रिप्टेड संदेश के प्रेषक और इच्छित प्राप्तकर्ता को यह पता होता है कि कितने अक्षरों को स्थानांतरित करना है। + +[विजनेयर सिफर](https://wikipedia.org/wiki/Vigenère_cipher) ने इसे और आगे बढ़ाया, जिसमें शब्दों का उपयोग करके टेक्स्ट को एन्क्रिप्ट किया गया, ताकि मूल टेक्स्ट में प्रत्येक अक्षर को अलग-अलग मात्रा में स्थानांतरित किया जा सके, बजाय हमेशा एक ही संख्या में स्थानांतरित करने के। + +क्रिप्टोग्राफी का उपयोग विभिन्न उद्देश्यों के लिए किया गया, जैसे प्राचीन मेसोपोटामिया में एक कुम्हार के ग्लेज़ नुस्खे की रक्षा करना, भारत में गुप्त प्रेम पत्र लिखना, या प्राचीन मिस्र के जादुई मंत्रों को गुप्त रखना। + +### आधुनिक क्रिप्टोग्राफी + +आधुनिक क्रिप्टोग्राफी बहुत अधिक उन्नत है, जिससे इसे प्रारंभिक तरीकों की तुलना में तोड़ना कठिन हो गया है। आधुनिक क्रिप्टोग्राफी जटिल गणित का उपयोग करती है ताकि डेटा को एन्क्रिप्ट किया जा सके, जिसमें संभावित कुंजियों की इतनी बड़ी संख्या होती है कि बलपूर्वक हमले असंभव हो जाते हैं। + +क्रिप्टोग्राफी का उपयोग सुरक्षित संचार के लिए कई अलग-अलग तरीकों से किया जाता है। यदि आप GitHub पर यह पृष्ठ पढ़ रहे हैं, तो आप देख सकते हैं कि वेबसाइट का पता *HTTPS* से शुरू होता है, जिसका अर्थ है कि आपके ब्राउज़र और GitHub के वेब सर्वर के बीच का संचार एन्क्रिप्टेड है। यदि कोई आपके ब्राउज़र और GitHub के बीच बहने वाले इंटरनेट ट्रैफिक को पढ़ने में सक्षम हो, तो वे डेटा को नहीं पढ़ पाएंगे क्योंकि यह एन्क्रिप्टेड है। आपका कंप्यूटर यहां तक कि आपकी हार्ड ड्राइव पर सभी डेटा को एन्क्रिप्ट कर सकता है ताकि यदि कोई इसे चुरा ले, तो वे आपके डेटा को आपके पासवर्ड के बिना नहीं पढ़ सकें। + +> 🎓 HTTPS का मतलब है HyperText Transfer Protocol **Secure** + +दुर्भाग्य से, सब कुछ सुरक्षित नहीं है। कुछ डिवाइसों में कोई सुरक्षा नहीं होती, अन्य को आसानी से तोड़ी जा सकने वाली कुंजियों के साथ सुरक्षित किया जाता है, या कभी-कभी एक ही प्रकार के सभी डिवाइस एक ही कुंजी का उपयोग करते हैं। बहुत ही व्यक्तिगत IoT डिवाइसों के ऐसे मामले सामने आए हैं, जिनमें वाईफाई या ब्लूटूथ के माध्यम से कनेक्ट करने के लिए सभी का पासवर्ड एक जैसा होता है। यदि आप अपने डिवाइस से कनेक्ट कर सकते हैं, तो आप किसी और के डिवाइस से भी कनेक्ट कर सकते हैं। एक बार कनेक्ट होने के बाद, आप कुछ बहुत ही निजी डेटा तक पहुंच सकते हैं, या उनके डिवाइस को नियंत्रित कर सकते हैं। + +> 💁 आधुनिक क्रिप्टोग्राफी की जटिलताओं और इस दावे के बावजूद कि एन्क्रिप्शन को तोड़ने में अरबों साल लग सकते हैं, क्वांटम कंप्यूटिंग के उदय ने ज्ञात सभी एन्क्रिप्शन को बहुत कम समय में तोड़ने की संभावना को जन्म दिया है! + +### सममित और असममित कुंजियाँ + +एन्क्रिप्शन दो प्रकार का होता है - सममित और असममित। + +**सममित** एन्क्रिप्शन डेटा को एन्क्रिप्ट और डिक्रिप्ट करने के लिए एक ही कुंजी का उपयोग करता है। प्रेषक और प्राप्तकर्ता दोनों को एक ही कुंजी जाननी होती है। यह कम सुरक्षित प्रकार है, क्योंकि कुंजी को किसी न किसी तरह से साझा करना पड़ता है। प्रेषक को प्राप्तकर्ता को एन्क्रिप्टेड संदेश भेजने के लिए पहले कुंजी भेजनी पड़ सकती है। + +![सममित कुंजी एन्क्रिप्शन एक ही कुंजी का उपयोग करके संदेश को एन्क्रिप्ट और डिक्रिप्ट करता है](../../../../../translated_images/send-message-symmetric-key.a2e8ad0d495896ffcdf15d25bb4491c695a5cb851457b359fb0f0c89d67707c9.hi.png) + +यदि कुंजी को ट्रांजिट में चुरा लिया जाता है, या प्रेषक या प्राप्तकर्ता हैक हो जाते हैं और कुंजी मिल जाती है, तो एन्क्रिप्शन को तोड़ा जा सकता है। + +![सममित कुंजी एन्क्रिप्शन केवल तभी सुरक्षित है जब हैकर कुंजी प्राप्त न करे - यदि ऐसा होता है तो वे संदेश को इंटरसेप्ट और डिक्रिप्ट कर सकते हैं](../../../../../translated_images/send-message-symmetric-key-hacker.e7cb53db1707adfb1486a8144060cb76435fe8dbdede8cecc09e7d15b2d9a251.hi.png) + +**असममित** एन्क्रिप्शन 2 कुंजियों का उपयोग करता है - एक एन्क्रिप्शन कुंजी और एक डिक्रिप्शन कुंजी, जिन्हें सार्वजनिक/निजी कुंजी जोड़ी कहा जाता है। सार्वजनिक कुंजी का उपयोग संदेश को एन्क्रिप्ट करने के लिए किया जाता है, लेकिन इसे डिक्रिप्ट करने के लिए उपयोग नहीं किया जा सकता, निजी कुंजी का उपयोग संदेश को डिक्रिप्ट करने के लिए किया जाता है लेकिन इसे एन्क्रिप्ट करने के लिए उपयोग नहीं किया जा सकता। + +![असममित एन्क्रिप्शन एन्क्रिप्ट और डिक्रिप्ट करने के लिए अलग-अलग कुंजियों का उपयोग करता है। एन्क्रिप्शन कुंजी को किसी भी संदेश प्रेषक को भेजा जाता है ताकि वे संदेश को एन्क्रिप्ट कर सकें और इसे कुंजी के मालिक प्राप्तकर्ता को भेज सकें](../../../../../translated_images/send-message-asymmetric.7abe327c62615b8c19805252af5d4b6c5e7aaeb8fbc455efeff866fe2d300b62.hi.png) + +प्राप्तकर्ता अपनी सार्वजनिक कुंजी साझा करता है, और प्रेषक इसका उपयोग संदेश को एन्क्रिप्ट करने के लिए करता है। एक बार संदेश भेजे जाने के बाद, प्राप्तकर्ता इसे अपनी निजी कुंजी से डिक्रिप्ट करता है। असममित एन्क्रिप्शन अधिक सुरक्षित है क्योंकि निजी कुंजी को प्राप्तकर्ता द्वारा निजी रखा जाता है और कभी साझा नहीं किया जाता। सार्वजनिक कुंजी को कोई भी प्राप्त कर सकता है क्योंकि इसका उपयोग केवल संदेशों को एन्क्रिप्ट करने के लिए किया जा सकता है। + +सममित एन्क्रिप्शन असममित एन्क्रिप्शन की तुलना में तेज़ है, लेकिन असममित अधिक सुरक्षित है। कुछ सिस्टम दोनों का उपयोग करते हैं - सममित कुंजी को एन्क्रिप्ट और साझा करने के लिए असममित एन्क्रिप्शन का उपयोग करते हैं, और फिर सभी डेटा को एन्क्रिप्ट करने के लिए सममित कुंजी का उपयोग करते हैं। यह प्रेषक और प्राप्तकर्ता के बीच सममित कुंजी को साझा करना अधिक सुरक्षित बनाता है, और डेटा को एन्क्रिप्ट और डिक्रिप्ट करते समय तेज़ बनाता है। + +## अपने IoT डिवाइस को सुरक्षित करें + +IoT डिवाइस को सममित या असममित एन्क्रिप्शन का उपयोग करके सुरक्षित किया जा सकता है। सममित आसान है, लेकिन कम सुरक्षित। + +### सममित कुंजियाँ + +जब आपने अपने IoT डिवाइस को IoT हब के साथ इंटरैक्ट करने के लिए सेट किया, तो आपने एक कनेक्शन स्ट्रिंग का उपयोग किया। एक उदाहरण कनेक्शन स्ट्रिंग है: + +```output +HostName=soil-moisture-sensor.azure-devices.net;DeviceId=soil-moisture-sensor;SharedAccessKey=Bhry+ind7kKEIDxubK61RiEHHRTrPl7HUow8cEm/mU0= +``` + +यह कनेक्शन स्ट्रिंग तीन भागों से बनी होती है, जो सेमी-कोलन द्वारा अलग होती है, और प्रत्येक भाग एक कुंजी और एक मान होता है: + +| कुंजी | मान | विवरण | +| --- | ----- | ----------- | +| HostName | `soil-moisture-sensor.azure-devices.net` | IoT हब का URL | +| DeviceId | `soil-moisture-sensor` | डिवाइस का अद्वितीय आईडी | +| SharedAccessKey | `Bhry+ind7kKEIDxubK61RiEHHRTrPl7HUow8cEm/mU0=` | एक सममित कुंजी जिसे डिवाइस और IoT हब दोनों जानते हैं | + +इस कनेक्शन स्ट्रिंग का अंतिम भाग, `SharedAccessKey`, वह सममित कुंजी है जिसे डिवाइस और IoT हब दोनों जानते हैं। यह कुंजी कभी भी डिवाइस से क्लाउड या क्लाउड से डिवाइस तक नहीं भेजी जाती। इसके बजाय, इसका उपयोग भेजे गए या प्राप्त डेटा को एन्क्रिप्ट करने के लिए किया जाता है। + +✅ एक प्रयोग करें। क्या होगा अगर आप अपने IoT डिवाइस को कनेक्ट करते समय कनेक्शन स्ट्रिंग के `SharedAccessKey` भाग को बदल दें? इसे आज़माएं। + +जब डिवाइस पहली बार कनेक्ट करने की कोशिश करता है, तो यह एक साझा एक्सेस सिग्नेचर (SAS) टोकन भेजता है, जिसमें IoT हब का URL, एक समय सीमा जब एक्सेस सिग्नेचर समाप्त होगा (आमतौर पर वर्तमान समय से 1 दिन), और एक सिग्नेचर शामिल होता है। यह सिग्नेचर URL और समाप्ति समय को कनेक्शन स्ट्रिंग से साझा एक्सेस कुंजी के साथ एन्क्रिप्ट करके बनता है। + +IoT हब इस सिग्नेचर को साझा एक्सेस कुंजी के साथ डिक्रिप्ट करता है, और यदि डिक्रिप्टेड मान URL और समाप्ति से मेल खाता है, तो डिवाइस को कनेक्ट करने की अनुमति दी जाती है। यह यह भी सत्यापित करता है कि वर्तमान समय समाप्ति से पहले है, ताकि एक दुर्भावनापूर्ण डिवाइस किसी वास्तविक डिवाइस के SAS टोकन को कैप्चर करके उसका उपयोग न कर सके। + +यह प्रेषक को सत्यापित करने का एक सुंदर तरीका है। कुछ ज्ञात डेटा को डिक्रिप +💁 आपके IoT डिवाइस को सटीक समय की जानकारी होनी चाहिए, जो आमतौर पर [NTP](https://wikipedia.org/wiki/Network_Time_Protocol) सर्वर से प्राप्त किया जाता है। यदि समय सटीक नहीं है, तो कनेक्शन विफल हो जाएगा। +कनेक्शन के बाद, डिवाइस से IoT हब या IoT हब से डिवाइस तक भेजे गए सभी डेटा को साझा एक्सेस कुंजी के साथ एन्क्रिप्ट किया जाएगा। + +✅ क्या आप सोच सकते हैं कि अगर कई डिवाइस एक ही कनेक्शन स्ट्रिंग साझा करते हैं तो क्या होगा? + +> 💁 कोड में इस कुंजी को स्टोर करना एक खराब सुरक्षा प्रथा है। यदि कोई हैकर आपके सोर्स कोड तक पहुंच जाता है, तो वह आपकी कुंजी प्राप्त कर सकता है। कोड रिलीज़ करते समय यह और भी मुश्किल हो जाता है क्योंकि हर डिवाइस के लिए अपडेटेड कुंजी के साथ कोड को फिर से कंपाइल करना पड़ता है। बेहतर यह है कि इस कुंजी को हार्डवेयर सुरक्षा मॉड्यूल से लोड किया जाए - IoT डिवाइस पर एक चिप जो एन्क्रिप्टेड मानों को स्टोर करती है और जिसे आपका कोड पढ़ सकता है। +> +> IoT सीखते समय, जैसा आपने पहले के पाठ में किया था, कोड में कुंजी डालना अक्सर आसान होता है, लेकिन आपको यह सुनिश्चित करना चाहिए कि यह कुंजी सार्वजनिक सोर्स कोड कंट्रोल में चेक इन न हो। + +डिवाइस के पास 2 कुंजियां और 2 संबंधित कनेक्शन स्ट्रिंग होती हैं। यह आपको कुंजियों को घुमाने की अनुमति देता है - यानी यदि पहली कुंजी से समझौता हो जाता है, तो आप दूसरी कुंजी पर स्विच कर सकते हैं और पहली कुंजी को फिर से जनरेट कर सकते हैं। + +### X.509 प्रमाणपत्र + +जब आप सार्वजनिक/निजी कुंजी जोड़ी के साथ असममित एन्क्रिप्शन का उपयोग कर रहे होते हैं, तो आपको अपना सार्वजनिक कुंजी उन सभी को प्रदान करनी होती है जो आपको डेटा भेजना चाहते हैं। समस्या यह है कि आपके कुंजी प्राप्तकर्ता को कैसे यकीन हो सकता है कि यह वास्तव में आपकी सार्वजनिक कुंजी है, न कि कोई और जो आपकी जगह होने का नाटक कर रहा है? कुंजी प्रदान करने के बजाय, आप इसके बजाय अपनी सार्वजनिक कुंजी को एक प्रमाणपत्र के अंदर प्रदान कर सकते हैं जिसे एक विश्वसनीय तृतीय पक्ष द्वारा सत्यापित किया गया है, जिसे X.509 प्रमाणपत्र कहा जाता है। + +X.509 प्रमाणपत्र डिजिटल दस्तावेज़ होते हैं जिनमें सार्वजनिक/निजी कुंजी जोड़ी का सार्वजनिक कुंजी भाग होता है। इन्हें आमतौर पर [प्रमाणन प्राधिकरणों](https://wikipedia.org/wiki/Certificate_authority) (CAs) नामक विश्वसनीय संगठनों में से एक द्वारा जारी किया जाता है और CA द्वारा डिजिटल रूप से हस्ताक्षरित किया जाता है ताकि यह संकेत दिया जा सके कि कुंजी मान्य है और आपसे आई है। आप प्रमाणपत्र पर भरोसा करते हैं और यह कि सार्वजनिक कुंजी उसी से है जो प्रमाणपत्र कहता है, क्योंकि आप CA पर भरोसा करते हैं, जैसे आप पासपोर्ट या ड्राइविंग लाइसेंस पर भरोसा करते हैं क्योंकि आप इसे जारी करने वाले देश पर भरोसा करते हैं। प्रमाणपत्रों की लागत होती है, इसलिए आप 'स्वयं-हस्ताक्षरित' भी कर सकते हैं, यानी परीक्षण उद्देश्यों के लिए स्वयं द्वारा हस्ताक्षरित एक प्रमाणपत्र बना सकते हैं। + +> 💁 आपको कभी भी उत्पादन रिलीज़ के लिए स्वयं-हस्ताक्षरित प्रमाणपत्र का उपयोग नहीं करना चाहिए। + +इन प्रमाणपत्रों में कई फ़ील्ड होती हैं, जिनमें सार्वजनिक कुंजी किसकी है, इसे जारी करने वाले CA का विवरण, यह कितने समय तक मान्य है, और स्वयं सार्वजनिक कुंजी शामिल है। किसी प्रमाणपत्र का उपयोग करने से पहले, इसे सत्यापित करना एक अच्छा अभ्यास है, यह जांचकर कि इसे मूल CA द्वारा हस्ताक्षरित किया गया था। + +✅ आप प्रमाणपत्र में फ़ील्ड की पूरी सूची [Microsoft Understanding X.509 Public Key Certificates tutorial](https://docs.microsoft.com/azure/iot-hub/tutorial-x509-certificates?WT.mc_id=academic-17441-jabenn#certificate-fields) में पढ़ सकते हैं। + +जब X.509 प्रमाणपत्रों का उपयोग किया जाता है, तो प्रेषक और प्राप्तकर्ता दोनों के पास अपनी सार्वजनिक और निजी कुंजियां होती हैं, साथ ही दोनों के पास X.509 प्रमाणपत्र होते हैं जिनमें सार्वजनिक कुंजी होती है। वे फिर किसी तरह X.509 प्रमाणपत्रों का आदान-प्रदान करते हैं, एक-दूसरे की सार्वजनिक कुंजियों का उपयोग करके डेटा को एन्क्रिप्ट करते हैं जो वे भेजते हैं, और अपनी निजी कुंजी का उपयोग करके डेटा को डिक्रिप्ट करते हैं जो वे प्राप्त करते हैं। + +![सार्वजनिक कुंजी साझा करने के बजाय, आप एक प्रमाणपत्र साझा कर सकते हैं। प्रमाणपत्र का उपयोगकर्ता यह सत्यापित कर सकता है कि यह आपसे आया है या नहीं, प्रमाणपत्र प्राधिकरण से जांच कर।](../../../../../translated_images/send-message-certificate.9cc576ac1e46b76eb58ebc8eedaa522566fa0700076da46f5180aad78c2435db.hi.png) + +X.509 प्रमाणपत्रों का उपयोग करने का एक बड़ा लाभ यह है कि इन्हें डिवाइसों के बीच साझा किया जा सकता है। आप एक प्रमाणपत्र बना सकते हैं, इसे IoT हब पर अपलोड कर सकते हैं, और इसे अपने सभी डिवाइसों के लिए उपयोग कर सकते हैं। प्रत्येक डिवाइस को केवल निजी कुंजी जानने की आवश्यकता होती है ताकि वह IoT हब से प्राप्त संदेशों को डिक्रिप्ट कर सके। + +आपके डिवाइस द्वारा IoT हब को भेजे गए संदेशों को एन्क्रिप्ट करने के लिए उपयोग किया जाने वाला प्रमाणपत्र Microsoft द्वारा प्रकाशित किया गया है। यह वही प्रमाणपत्र है जिसे Azure की कई सेवाएं उपयोग करती हैं, और यह कभी-कभी SDKs में निर्मित होता है। + +> 💁 याद रखें, सार्वजनिक कुंजी केवल सार्वजनिक होती है। Azure सार्वजनिक कुंजी का उपयोग केवल Azure को भेजे गए डेटा को एन्क्रिप्ट करने के लिए किया जा सकता है, इसे डिक्रिप्ट करने के लिए नहीं, इसलिए इसे हर जगह साझा किया जा सकता है, जिसमें सोर्स कोड भी शामिल है। उदाहरण के लिए, आप इसे [Azure IoT C SDK सोर्स कोड](https://github.com/Azure/azure-iot-sdk-c/blob/master/certs/certs.c) में देख सकते हैं। + +✅ X.509 प्रमाणपत्रों के साथ बहुत सारा तकनीकी शब्दजाल होता है। आप [The layman’s guide to X.509 certificate jargon](https://techcommunity.microsoft.com/t5/internet-of-things/the-layman-s-guide-to-x-509-certificate-jargon/ba-p/2203540?WT.mc_id=academic-17441-jabenn) में उन शब्दों की परिभाषाएं पढ़ सकते हैं जिनसे आप सामना कर सकते हैं। + +## X.509 प्रमाणपत्र बनाएं और उपयोग करें + +X.509 प्रमाणपत्र बनाने के चरण: + +1. सार्वजनिक/निजी कुंजी जोड़ी बनाएं। सार्वजनिक/निजी कुंजी जोड़ी बनाने के लिए सबसे व्यापक रूप से उपयोग किए जाने वाले एल्गोरिदम में से एक [Rivest–Shamir–Adleman](https://wikipedia.org/wiki/RSA_(cryptosystem))(RSA) कहलाता है। + +1. सार्वजनिक कुंजी को संबद्ध डेटा के साथ हस्ताक्षर के लिए सबमिट करें, या तो CA द्वारा या स्वयं-हस्ताक्षरित करके। + +Azure CLI में IoT हब में एक नया डिवाइस पहचान बनाने और सार्वजनिक/निजी कुंजी जोड़ी को स्वचालित रूप से जनरेट करने और एक स्वयं-हस्ताक्षरित प्रमाणपत्र बनाने के लिए कमांड होते हैं। + +> 💁 यदि आप Azure CLI का उपयोग करने के बजाय चरणों को विस्तार से देखना चाहते हैं, तो आप इसे [Microsoft IoT Hub दस्तावेज़ में OpenSSL का उपयोग करके स्वयं-हस्ताक्षरित प्रमाणपत्र बनाने की ट्यूटोरियल](https://docs.microsoft.com/azure/iot-hub/tutorial-x509-self-sign?WT.mc_id=academic-17441-jabenn) में पा सकते हैं। + +### कार्य - X.509 प्रमाणपत्र का उपयोग करके डिवाइस पहचान बनाएं + +1. निम्नलिखित कमांड चलाएं ताकि नई डिवाइस पहचान को पंजीकृत किया जा सके, कुंजियों और प्रमाणपत्रों को स्वचालित रूप से जनरेट किया जा सके: + + ```sh + az iot hub device-identity create --device-id soil-moisture-sensor-x509 \ + --am x509_thumbprint \ + --output-dir . \ + --hub-name + ``` + + `` को अपने IoT हब के लिए उपयोग किए गए नाम से बदलें। + + यह `soil-moisture-sensor-x509` नामक एक डिवाइस बनाएगा ताकि इसे पिछले पाठ में बनाई गई डिवाइस पहचान से अलग किया जा सके। यह कमांड वर्तमान निर्देशिका में 2 फाइलें भी बनाएगा: + + * `soil-moisture-sensor-x509-key.pem` - यह फाइल डिवाइस के लिए निजी कुंजी को रखती है। + * `soil-moisture-sensor-x509-cert.pem` - यह डिवाइस के लिए X.509 प्रमाणपत्र फाइल है। + + इन फाइलों को सुरक्षित रखें! निजी कुंजी फाइल को सार्वजनिक सोर्स कोड कंट्रोल में चेक इन नहीं किया जाना चाहिए। + +### कार्य - अपने डिवाइस कोड में X.509 प्रमाणपत्र का उपयोग करें + +अपने IoT डिवाइस को X.509 प्रमाणपत्र का उपयोग करके क्लाउड से कनेक्ट करने के लिए संबंधित गाइड का पालन करें: + +* [Arduino - Wio Terminal](wio-terminal-x509.md) +* [सिंगल-बोर्ड कंप्यूटर - Raspberry Pi/Virtual IoT डिवाइस](single-board-computer-x509.md) + +--- + +## 🚀 चुनौती + +Azure सेवाओं जैसे Resource Groups और IoT Hubs को बनाने, प्रबंधित करने और हटाने के कई तरीके हैं। एक तरीका [Azure Portal](https://portal.azure.com?WT.mc_id=academic-17441-jabenn) है - एक वेब-आधारित इंटरफ़ेस जो आपको अपने Azure सेवाओं को प्रबंधित करने के लिए GUI प्रदान करता है। + +[portal.azure.com](https://portal.azure.com?WT.mc_id=academic-17441-jabenn) पर जाएं और पोर्टल की जांच करें। देखें कि क्या आप पोर्टल का उपयोग करके एक IoT हब बना सकते हैं, फिर इसे हटा सकते हैं। + +**संकेत** - जब आप पोर्टल के माध्यम से सेवाएं बना रहे होते हैं, तो आपको पहले से Resource Group बनाने की आवश्यकता नहीं होती है, इसे सेवा बनाते समय बनाया जा सकता है। सुनिश्चित करें कि जब आप समाप्त कर लें तो इसे हटा दें! + +आप [Azure पोर्टल दस्तावेज़](https://docs.microsoft.com/azure/azure-portal/?WT.mc_id=academic-17441-jabenn) में Azure पोर्टल पर बहुत सारे दस्तावेज़, ट्यूटोरियल और गाइड पा सकते हैं। + +## व्याख्यान के बाद क्विज़ + +[व्याख्यान के बाद क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/20) + +## समीक्षा और स्व-अध्ययन + +* [क्रिप्टोग्राफी का इतिहास](https://wikipedia.org/wiki/History_of_cryptography) पेज पर क्रिप्टोग्राफी के इतिहास के बारे में पढ़ें। +* [X.509](https://wikipedia.org/wiki/X.509) पेज पर X.509 प्रमाणपत्रों के बारे में पढ़ें। + +## असाइनमेंट + +[एक नया IoT डिवाइस बनाएं](assignment.md) + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल दस्तावेज़, जो इसकी मूल भाषा में है, को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/6-keep-your-plant-secure/assignment.md b/translations/hi/2-farm/lessons/6-keep-your-plant-secure/assignment.md new file mode 100644 index 00000000..625c726a --- /dev/null +++ b/translations/hi/2-farm/lessons/6-keep-your-plant-secure/assignment.md @@ -0,0 +1,27 @@ + +# एक नया IoT डिवाइस बनाएं + +## निर्देश + +पिछले 6 पाठों में आपने डिजिटल कृषि और IoT डिवाइस का उपयोग करके डेटा इकट्ठा करने, पौधों की वृद्धि का अनुमान लगाने, और मिट्टी की नमी के आधार पर पानी देने को स्वचालित करने के बारे में सीखा है। + +जो आपने सीखा है उसका उपयोग करके एक नया IoT डिवाइस बनाएं जिसमें एक सेंसर और एक्टुएटर शामिल हो। टेलीमेट्री को IoT Hub पर भेजें और इसका उपयोग सर्वरलेस कोड के माध्यम से एक्टुएटर को नियंत्रित करने के लिए करें। आप इस या पिछले प्रोजेक्ट में उपयोग किए गए सेंसर और एक्टुएटर का उपयोग कर सकते हैं, या यदि आपके पास अन्य हार्डवेयर है तो कुछ नया आज़माएं। + +## मूल्यांकन मानदंड + +| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | +| -------- | --------- | -------- | ----------------- | +| सेंसर और एक्टुएटर के साथ IoT डिवाइस को कोड करें | सेंसर और एक्टुएटर के साथ काम करने वाला IoT डिवाइस कोड किया | सेंसर या एक्टुएटर के साथ काम करने वाला IoT डिवाइस कोड किया | सेंसर या एक्टुएटर के साथ IoT डिवाइस को कोड करने में असमर्थ | +| IoT डिवाइस को IoT Hub से कनेक्ट करें | IoT Hub को तैनात करने, टेलीमेट्री भेजने और कमांड प्राप्त करने में सक्षम | IoT Hub को तैनात करने और टेलीमेट्री भेजने या कमांड प्राप्त करने में सक्षम | IoT Hub को तैनात करने और IoT डिवाइस से संवाद करने में असमर्थ | +| सर्वरलेस कोड का उपयोग करके एक्टुएटर को नियंत्रित करें | टेलीमेट्री इवेंट्स द्वारा ट्रिगर किए गए डिवाइस को नियंत्रित करने के लिए Azure Function तैनात करने में सक्षम | टेलीमेट्री इवेंट्स द्वारा ट्रिगर किए गए Azure Function तैनात करने में सक्षम लेकिन एक्टुएटर को नियंत्रित करने में असमर्थ | Azure Function तैनात करने में असमर्थ | + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/6-keep-your-plant-secure/single-board-computer-x509.md b/translations/hi/2-farm/lessons/6-keep-your-plant-secure/single-board-computer-x509.md new file mode 100644 index 00000000..f196b680 --- /dev/null +++ b/translations/hi/2-farm/lessons/6-keep-your-plant-secure/single-board-computer-x509.md @@ -0,0 +1,69 @@ + +# अपने डिवाइस को X.509 प्रमाणपत्र के साथ कनेक्ट करें - वर्चुअल IoT हार्डवेयर और रास्पबेरी पाई + +इस पाठ के इस भाग में, आप अपने वर्चुअल IoT डिवाइस या रास्पबेरी पाई को X.509 प्रमाणपत्र का उपयोग करके अपने IoT हब से कनेक्ट करेंगे। + +## अपने डिवाइस को IoT हब से कनेक्ट करें + +अगला कदम है अपने डिवाइस को X.509 प्रमाणपत्रों का उपयोग करके IoT हब से कनेक्ट करना। + +### कार्य - IoT हब से कनेक्ट करें + +1. कुंजी और प्रमाणपत्र फ़ाइलों को उस फ़ोल्डर में कॉपी करें जिसमें आपका IoT डिवाइस कोड है। यदि आप VS Code Remote SSH के माध्यम से रास्पबेरी पाई का उपयोग कर रहे हैं और आपने अपने पीसी या मैक पर कुंजियाँ बनाई हैं, तो आप इन फ़ाइलों को VS Code के एक्सप्लोरर में ड्रैग और ड्रॉप करके कॉपी कर सकते हैं। + +1. `app.py` फ़ाइल खोलें। + +1. X.509 प्रमाणपत्र का उपयोग करके कनेक्ट करने के लिए, आपको IoT हब का होस्ट नाम और X.509 प्रमाणपत्र की आवश्यकता होगी। डिवाइस क्लाइंट बनाने से पहले निम्न कोड जोड़कर होस्ट नाम वाली एक वेरिएबल बनाएं: + + ```python + host_name = "" + ``` + + `` को अपने IoT हब के होस्ट नाम से बदलें। आप इसे `connection_string` के `HostName` सेक्शन से प्राप्त कर सकते हैं। यह आपके IoT हब का नाम होगा, जो `.azure-devices.net` पर समाप्त होता है। + +1. इसके नीचे, डिवाइस आईडी के साथ एक वेरिएबल घोषित करें: + + ```python + device_id = "soil-moisture-sensor-x509" + ``` + +1. आपको `X509` क्लास का एक इंस्टेंस चाहिए जिसमें X.509 फ़ाइलें हों। `azure.iot.device` मॉड्यूल से इम्पोर्ट की गई क्लासेस की सूची में `X509` जोड़ें: + + ```python + from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse, X509 + ``` + +1. अपने प्रमाणपत्र और कुंजी फ़ाइलों का उपयोग करके `X509` क्लास का एक इंस्टेंस बनाएं। इसे `host_name` डिक्लेरेशन के नीचे जोड़ें: + + ```python + x509 = X509("./soil-moisture-sensor-x509-cert.pem", "./soil-moisture-sensor-x509-key.pem") + ``` + + यह `X509` क्लास को पहले बनाई गई `soil-moisture-sensor-x509-cert.pem` और `soil-moisture-sensor-x509-key.pem` फ़ाइलों का उपयोग करके बनाएगा। + +1. उस कोड लाइन को बदलें जो `device_client` को एक कनेक्शन स्ट्रिंग से बनाती है, निम्न कोड के साथ: + + ```python + device_client = IoTHubDeviceClient.create_from_x509_certificate(x509, host_name, device_id) + ``` + + यह कनेक्शन स्ट्रिंग के बजाय X.509 प्रमाणपत्र का उपयोग करके कनेक्ट करेगा। + +1. `connection_string` वेरिएबल वाली लाइन को हटा दें। + +1. अपना कोड चलाएं। IoT हब को भेजे गए संदेशों की निगरानी करें और पहले की तरह डायरेक्ट मेथड रिक्वेस्ट भेजें। आप देखेंगे कि डिवाइस कनेक्ट हो रहा है और मिट्टी की नमी के रीडिंग भेज रहा है, साथ ही डायरेक्ट मेथड रिक्वेस्ट प्राप्त कर रहा है। + +> 💁 आप इस कोड को [code/pi](../../../../../2-farm/lessons/6-keep-your-plant-secure/code/pi) या [code/virtual-device](../../../../../2-farm/lessons/6-keep-your-plant-secure/code/virtual-device) फ़ोल्डर में पा सकते हैं। + +😀 आपका मिट्टी की नमी सेंसर प्रोग्राम X.509 प्रमाणपत्र का उपयोग करके आपके IoT हब से कनेक्ट हो गया है! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-farm/lessons/6-keep-your-plant-secure/wio-terminal-x509.md b/translations/hi/2-farm/lessons/6-keep-your-plant-secure/wio-terminal-x509.md new file mode 100644 index 00000000..df2651ab --- /dev/null +++ b/translations/hi/2-farm/lessons/6-keep-your-plant-secure/wio-terminal-x509.md @@ -0,0 +1,15 @@ + +# अपने डिवाइस कोड में X.509 प्रमाणपत्र का उपयोग करें - Wio Terminal + +इस लेखन के समय, Azure Arduino SDK X.509 प्रमाणपत्रों का समर्थन नहीं करता है। यदि आप X.509 प्रमाणपत्रों के साथ प्रयोग करना चाहते हैं, तो आप [Python SDK का उपयोग करके वर्चुअल IoT डिवाइस निर्देश](single-board-computer-x509.md) देख सकते हैं। + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/3-transport/README.md b/translations/hi/3-transport/README.md new file mode 100644 index 00000000..ce3c5eef --- /dev/null +++ b/translations/hi/3-transport/README.md @@ -0,0 +1,36 @@ + +# खेत से फैक्ट्री तक परिवहन - IoT का उपयोग करके खाद्य डिलीवरी को ट्रैक करना + +कई किसान खाद्य पदार्थ उगाते हैं ताकि वे इसे बेच सकें - या तो वे व्यावसायिक किसान होते हैं जो अपनी पूरी फसल बेचते हैं, या वे आत्मनिर्भर किसान होते हैं जो अपनी अतिरिक्त उपज बेचकर आवश्यक चीजें खरीदते हैं। किसी न किसी तरह से, खाद्य पदार्थ को खेत से उपभोक्ता तक पहुंचाना होता है, और यह आमतौर पर खेतों से थोक परिवहन, हब या प्रसंस्करण संयंत्रों तक, फिर दुकानों तक निर्भर करता है। उदाहरण के लिए, एक टमाटर किसान टमाटर की कटाई करेगा, उन्हें बक्सों में पैक करेगा, बक्सों को ट्रक में लोड करेगा और फिर उन्हें प्रसंस्करण संयंत्र तक पहुंचाएगा। वहां टमाटरों को छांटा जाएगा, और फिर उन्हें उपभोक्ताओं तक प्रसंस्कृत खाद्य पदार्थ, खुदरा बिक्री, या रेस्तरां में उपयोग के रूप में पहुंचाया जाएगा। + +IoT इस आपूर्ति श्रृंखला में मदद कर सकता है, खाद्य पदार्थ को ट्रांजिट में ट्रैक करके - यह सुनिश्चित करते हुए कि ड्राइवर सही जगह जा रहे हैं, वाहन स्थानों की निगरानी कर रहे हैं, और जब वाहन पहुंचते हैं तो अलर्ट प्राप्त कर रहे हैं ताकि खाद्य पदार्थ को उतारकर जल्द से जल्द प्रसंस्करण के लिए तैयार किया जा सके। + +> 🎓 एक *आपूर्ति श्रृंखला* वह गतिविधियों की श्रृंखला है जो किसी चीज़ को बनाने और वितरित करने के लिए होती है। उदाहरण के लिए, टमाटर की खेती में यह बीज, मिट्टी, उर्वरक और पानी की आपूर्ति, टमाटर उगाने, टमाटर को एक केंद्रीय हब तक पहुंचाने, उन्हें सुपरमार्केट के स्थानीय हब तक ले जाने, व्यक्तिगत सुपरमार्केट तक पहुंचाने, प्रदर्शन पर रखने, फिर उपभोक्ता को बेचने और घर ले जाकर खाने तक शामिल है। प्रत्येक चरण एक श्रृंखला की कड़ी की तरह है। + +> 🎓 आपूर्ति श्रृंखला का परिवहन भाग *लॉजिस्टिक्स* के रूप में जाना जाता है। + +इन 4 पाठों में, आप सीखेंगे कि कैसे इंटरनेट ऑफ थिंग्स का उपयोग करके आपूर्ति श्रृंखला में सुधार किया जा सकता है, खाद्य पदार्थ को (आभासी) ट्रक पर लोड करते समय निगरानी करके, जिसे उसके गंतव्य तक पहुंचने तक ट्रैक किया जाता है। आप GPS ट्रैकिंग के बारे में जानेंगे, GPS डेटा को स्टोर और विज़ुअलाइज़ करने का तरीका, और यह जानेंगे कि ट्रक के गंतव्य पर पहुंचने पर अलर्ट कैसे प्राप्त करें। + +> 💁 इन पाठों में कुछ क्लाउड संसाधनों का उपयोग किया जाएगा। यदि आप इस प्रोजेक्ट के सभी पाठ पूरे नहीं करते हैं, तो सुनिश्चित करें कि आप [अपने प्रोजेक्ट को साफ करें](../clean-up.md)। + +## विषय + +1. [स्थान ट्रैकिंग](lessons/1-location-tracking/README.md) +1. [स्थान डेटा स्टोर करें](lessons/2-store-location-data/README.md) +1. [स्थान डेटा को विज़ुअलाइज़ करें](lessons/3-visualize-location-data/README.md) +1. [जियोफेंस](lessons/4-geofences/README.md) + +## क्रेडिट + +सभी पाठ [Jen Looper](https://github.com/jlooper) और [Jim Bennett](https://GitHub.com/JimBobBennett) द्वारा ♥️ के साथ लिखे गए हैं। + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/3-transport/lessons/1-location-tracking/README.md b/translations/hi/3-transport/lessons/1-location-tracking/README.md new file mode 100644 index 00000000..aad33798 --- /dev/null +++ b/translations/hi/3-transport/lessons/1-location-tracking/README.md @@ -0,0 +1,214 @@ + +# स्थान ट्रैकिंग + +![इस पाठ का स्केच नोट अवलोकन](../../../../../translated_images/lesson-11.9fddbac4b664c6d50ab7ac9bb32f1fc3f945f03760e72f7f43938073762fb017.hi.jpg) + +> स्केच नोट [नित्या नरसिम्हन](https://github.com/nitya) द्वारा। बड़े संस्करण के लिए छवि पर क्लिक करें। + +## प्री-लेक्चर क्विज़ + +[प्री-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/21) + +## परिचय + +किसी किसान से उपभोक्ता तक भोजन पहुंचाने की मुख्य प्रक्रिया में उत्पादन के बक्सों को ट्रकों, जहाजों, हवाई जहाजों या अन्य वाणिज्यिक परिवहन वाहनों पर लोड करना और भोजन को कहीं पहुंचाना शामिल है - या तो सीधे ग्राहक को, या प्रसंस्करण के लिए एक केंद्रीय केंद्र या गोदाम में। खेत से उपभोक्ता तक की पूरी प्रक्रिया को *सप्लाई चेन* कहा जाता है। नीचे दिया गया वीडियो एरिज़ोना स्टेट यूनिवर्सिटी के W. P. Carey School of Business से सप्लाई चेन के विचार और इसे प्रबंधित करने के तरीके के बारे में अधिक विस्तार से बात करता है। + +[![सप्लाई चेन प्रबंधन क्या है? एरिज़ोना स्टेट यूनिवर्सिटी के W. P. Carey School of Business का वीडियो](https://img.youtube.com/vi/Mi1QBxVjZAw/0.jpg)](https://www.youtube.com/watch?v=Mi1QBxVjZAw) + +> 🎥 ऊपर दी गई छवि पर क्लिक करें और वीडियो देखें + +IoT उपकरण जोड़ने से आपकी सप्लाई चेन में काफी सुधार हो सकता है, जिससे आप यह प्रबंधित कर सकते हैं कि वस्तुएं कहां हैं, परिवहन और सामानों को बेहतर तरीके से संभालने की योजना बना सकते हैं, और समस्याओं पर तेजी से प्रतिक्रिया दे सकते हैं। + +ट्रकों जैसे वाहनों के बेड़े का प्रबंधन करते समय, यह जानना उपयोगी होता है कि किसी दिए गए समय पर प्रत्येक वाहन कहां है। वाहनों में GPS सेंसर लगाए जा सकते हैं जो उनकी लोकेशन को IoT सिस्टम्स को भेजते हैं, जिससे मालिक उनकी स्थिति का पता लगा सकते हैं, उनके द्वारा लिए गए मार्ग को देख सकते हैं, और यह जान सकते हैं कि वे अपने गंतव्य पर कब पहुंचेंगे। अधिकांश वाहन वाईफाई कवरेज के बाहर काम करते हैं, इसलिए वे इस प्रकार का डेटा भेजने के लिए सेलुलर नेटवर्क का उपयोग करते हैं। कभी-कभी GPS सेंसर अधिक जटिल IoT उपकरणों जैसे इलेक्ट्रॉनिक लॉग बुक्स में निर्मित होता है। ये उपकरण यह ट्रैक करते हैं कि ट्रक कितने समय से यात्रा में है ताकि यह सुनिश्चित किया जा सके कि ड्राइवर स्थानीय कानूनों के तहत काम करने के घंटों का पालन कर रहे हैं। + +इस पाठ में आप सीखेंगे कि ग्लोबल पोजिशनिंग सिस्टम (GPS) सेंसर का उपयोग करके वाहन की लोकेशन को कैसे ट्रैक किया जाए। + +इस पाठ में हम निम्नलिखित विषयों को कवर करेंगे: + +* [कनेक्टेड वाहन](../../../../../3-transport/lessons/1-location-tracking) +* [भौगोलिक निर्देशांक](../../../../../3-transport/lessons/1-location-tracking) +* [ग्लोबल पोजिशनिंग सिस्टम (GPS)](../../../../../3-transport/lessons/1-location-tracking) +* [GPS सेंसर डेटा पढ़ें](../../../../../3-transport/lessons/1-location-tracking) +* [NMEA GPS डेटा](../../../../../3-transport/lessons/1-location-tracking) +* [GPS सेंसर डेटा को डिकोड करें](../../../../../3-transport/lessons/1-location-tracking) + +## कनेक्टेड वाहन + +IoT माल परिवहन के तरीके को बदल रहा है, जिससे *कनेक्टेड वाहनों* के बेड़े बन रहे हैं। ये वाहन केंद्रीय IT सिस्टम्स से जुड़े होते हैं और अपनी लोकेशन और अन्य सेंसर डेटा की रिपोर्ट करते हैं। कनेक्टेड वाहनों के बेड़े के कई फायदे हैं: + +* लोकेशन ट्रैकिंग - आप किसी भी समय यह पता लगा सकते हैं कि वाहन कहां है, जिससे आप: + + * गंतव्य पर वाहन के पहुंचने से पहले अलर्ट प्राप्त कर सकते हैं ताकि अनलोडिंग के लिए क्रू तैयार हो सके। + * चोरी हुए वाहनों का पता लगा सकते हैं। + * लोकेशन और मार्ग डेटा को ट्रैफिक समस्याओं के साथ जोड़ सकते हैं ताकि यात्रा के बीच में वाहनों को पुनः मार्गित किया जा सके। + * टैक्स का पालन कर सकते हैं। कुछ देशों में सार्वजनिक सड़कों पर चलने वाले वाहनों के लिए माइलेज के आधार पर टैक्स लिया जाता है (जैसे [न्यूज़ीलैंड का RUC](https://www.nzta.govt.nz/vehicles/licensing-rego/road-user-charges/)), इसलिए यह जानना कि वाहन सार्वजनिक सड़कों पर है या निजी सड़कों पर, टैक्स की गणना को आसान बनाता है। + * ब्रेकडाउन की स्थिति में मरम्मत क्रू को सही जगह भेज सकते हैं। + +* ड्राइवर टेलीमेट्री - यह सुनिश्चित करना कि ड्राइवर गति सीमा का पालन कर रहे हैं, उचित गति से मोड़ ले रहे हैं, जल्दी और कुशलता से ब्रेक लगा रहे हैं, और सुरक्षित रूप से गाड़ी चला रहे हैं। कनेक्टेड वाहनों में घटनाओं को रिकॉर्ड करने के लिए कैमरे भी हो सकते हैं। इसे बीमा से जोड़ा जा सकता है, जिससे अच्छे ड्राइवरों के लिए कम दरें मिल सकती हैं। + +* ड्राइवर घंटों का अनुपालन - यह सुनिश्चित करना कि ड्राइवर केवल कानूनी रूप से अनुमत घंटों के लिए गाड़ी चला रहे हैं, उनके इंजन चालू और बंद करने के समय के आधार पर। + +इन लाभों को संयोजित किया जा सकता है - उदाहरण के लिए, ड्राइवर घंटों के अनुपालन को लोकेशन ट्रैकिंग के साथ जोड़कर ड्राइवरों को पुनः मार्गित किया जा सकता है यदि वे अपने गंतव्य तक अपने अनुमत ड्राइविंग घंटों के भीतर नहीं पहुंच सकते। इन्हें अन्य वाहन-विशिष्ट टेलीमेट्री के साथ भी संयोजित किया जा सकता है, जैसे तापमान नियंत्रित ट्रकों से तापमान डेटा, जिससे वाहनों को पुनः मार्गित किया जा सकता है यदि उनका वर्तमान मार्ग माल को तापमान पर बनाए रखने में असमर्थ होगा। + +> 🎓 लॉजिस्टिक्स वह प्रक्रिया है जिसमें माल को एक स्थान से दूसरे स्थान तक ले जाया जाता है, जैसे कि एक खेत से एक सुपरमार्केट तक एक या अधिक गोदामों के माध्यम से। एक किसान टमाटरों के बक्से पैक करता है जो एक ट्रक पर लोड किए जाते हैं, एक केंद्रीय गोदाम में पहुंचाए जाते हैं, और एक दूसरे ट्रक पर रखे जाते हैं जिसमें विभिन्न प्रकार के उत्पादन का मिश्रण हो सकता है, जो फिर सुपरमार्केट में पहुंचाए जाते हैं। + +वाहन ट्रैकिंग का मुख्य घटक GPS है - सेंसर जो पृथ्वी पर कहीं भी अपनी लोकेशन का पता लगा सकते हैं। इस पाठ में आप सीखेंगे कि GPS सेंसर का उपयोग कैसे करें, शुरुआत करते हुए यह सीखने से कि पृथ्वी पर लोकेशन को कैसे परिभाषित किया जाए। + +## भौगोलिक निर्देशांक + +भौगोलिक निर्देशांक पृथ्वी की सतह पर बिंदुओं को परिभाषित करने के लिए उपयोग किए जाते हैं, जैसे कि कंप्यूटर स्क्रीन पर पिक्सल को खींचने या क्रॉस स्टिच में सिलाई की स्थिति निर्धारित करने के लिए निर्देशांक का उपयोग किया जाता है। एक बिंदु के लिए, आपके पास निर्देशांक की एक जोड़ी होती है। उदाहरण के लिए, रेडमंड, वाशिंगटन, USA में माइक्रोसॉफ्ट कैंपस 47.6423109, -122.1390293 पर स्थित है। + +### अक्षांश और देशांतर + +पृथ्वी एक गोला है - एक त्रि-आयामी वृत्त। इस कारण से, बिंदुओं को 360 डिग्री में विभाजित करके परिभाषित किया जाता है, जैसे कि वृत्तों की ज्यामिति। अक्षांश उत्तर से दक्षिण तक डिग्री की संख्या को मापता है, देशांतर पूर्व से पश्चिम तक डिग्री की संख्या को मापता है। + +> 💁 कोई वास्तव में नहीं जानता कि वृत्तों को 360 डिग्री में क्यों विभाजित किया गया। [डिग्री (कोण) पृष्ठ विकिपीडिया पर](https://wikipedia.org/wiki/Degree_(angle)) कुछ संभावित कारणों को कवर करता है। + +![अक्षांश रेखाएं: उत्तरी ध्रुव पर 90°, भूमध्य रेखा और दक्षिणी ध्रुव के बीच](../../../../../translated_images/latitude-lines.11d8d91dfb2014a57437272d7db7fd6607243098e8685f06e0c5f1ec984cb7eb.hi.png) + +अक्षांश को रेखाओं का उपयोग करके मापा जाता है जो पृथ्वी को घेरती हैं और भूमध्य रेखा के समानांतर चलती हैं, उत्तरी और दक्षिणी गोलार्ध को 90° में विभाजित करती हैं। भूमध्य रेखा 0° पर है, उत्तरी ध्रुव 90° पर है, जिसे 90° उत्तर भी कहा जाता है, और दक्षिणी ध्रुव -90° पर है, जिसे 90° दक्षिण भी कहा जाता है। + +देशांतर को पूर्व और पश्चिम में मापी गई डिग्री की संख्या के रूप में मापा जाता है। देशांतर का 0° मूल बिंदु *प्राइम मेरिडियन* कहलाता है, जिसे 1884 में परिभाषित किया गया था कि यह एक रेखा है जो उत्तरी ध्रुव से दक्षिणी ध्रुव तक जाती है और [ब्रिटिश रॉयल ऑब्जर्वेटरी, ग्रीनविच, इंग्लैंड](https://wikipedia.org/wiki/Royal_Observatory,_Greenwich) से गुजरती है। + +![देशांतर रेखाएं: प्राइम मेरिडियन के पश्चिम में -180°, प्राइम मेरिडियन पर 0°, और प्राइम मेरिडियन के पूर्व में 180°](../../../../../translated_images/longitude-meridians.ab4ef1c91c064586b0185a3c8d39e585903696c6a7d28c098a93a629cddb5d20.hi.png) + +> 🎓 मेरिडियन एक काल्पनिक सीधी रेखा है जो उत्तरी ध्रुव से दक्षिणी ध्रुव तक जाती है, एक अर्धवृत्त बनाती है। + +किसी बिंदु के देशांतर को मापने के लिए, आप भूमध्य रेखा के चारों ओर प्राइम मेरिडियन से उस बिंदु से गुजरने वाले मेरिडियन तक डिग्री की संख्या मापते हैं। देशांतर -180° से, या 180° पश्चिम, 0° प्राइम मेरिडियन पर, 180° तक, या 180° पूर्व तक जाता है। 180° और -180° एक ही बिंदु को संदर्भित करते हैं, जिसे एंटीमेरिडियन या 180वां मेरिडियन कहा जाता है। यह प्राइम मेरिडियन के विपरीत पृथ्वी के दूसरी ओर एक मेरिडियन है। + +> 💁 एंटीमेरिडियन को अंतर्राष्ट्रीय तिथि रेखा के साथ भ्रमित नहीं किया जाना चाहिए, जो लगभग उसी स्थिति में है, लेकिन यह एक सीधी रेखा नहीं है और भू-राजनीतिक सीमाओं के चारों ओर फिट होने के लिए भिन्न होती है। + +✅ कुछ शोध करें: अपने वर्तमान स्थान के अक्षांश और देशांतर का पता लगाने का प्रयास करें। + +### डिग्री, मिनट और सेकंड बनाम दशमलव डिग्री + +पारंपरिक रूप से, अक्षांश और देशांतर की डिग्री का मापन सेक्साजेसिमल नंबरिंग, या बेस-60, का उपयोग करके किया जाता था, एक नंबरिंग प्रणाली जिसका उपयोग प्राचीन बाबुलियों द्वारा किया गया था जिन्होंने समय और दूरी का पहला मापन और रिकॉर्डिंग किया। आप शायद इसे रोज़ाना उपयोग करते हैं बिना इसे महसूस किए - घंटों को 60 मिनट में और मिनटों को 60 सेकंड में विभाजित करना। + +देशांतर और अक्षांश को डिग्री, मिनट और सेकंड में मापा जाता है, जिसमें एक मिनट 1/60 डिग्री होता है, और 1 सेकंड 1/60 मिनट होता है। + +उदाहरण के लिए, भूमध्य रेखा पर: + +* अक्षांश का 1° **111.3 किलोमीटर** है। +* अक्षांश का 1 मिनट 111.3/60 = **1.855 किलोमीटर** है। +* अक्षांश का 1 सेकंड 1.855/60 = **0.031 किलोमीटर** है। + +मिनट के लिए प्रतीक एक सिंगल कोट है, सेकंड के लिए डबल कोट। उदाहरण के लिए, 2 डिग्री, 17 मिनट, और 43 सेकंड को 2°17'43" लिखा जाएगा। सेकंड के भाग दशमलव के रूप में दिए जाते हैं, उदाहरण के लिए आधा सेकंड 0°0'0.5" होगा। + +कंप्यूटर बेस-60 में काम नहीं करते, इसलिए ये निर्देशांक GPS डेटा का उपयोग करते समय अधिकांश कंप्यूटर सिस्टम्स में दशमलव डिग्री के रूप में दिए जाते हैं। उदाहरण के लिए, 2°17'43" को 2.295277 लिखा जाएगा। डिग्री प्रतीक आमतौर पर छोड़ा जाता है। + +किसी बिंदु के निर्देशांक हमेशा `अक्षांश, देशांतर` के रूप में दिए जाते हैं, इसलिए पहले दिए गए उदाहरण में माइक्रोसॉफ्ट कैंपस 47.6423109,-122.117198 के पास: + +* अक्षांश 47.6423109 (भूमध्य रेखा के उत्तर में 47.6423109 डिग्री) है। +* देशांतर -122.1390293 (प्राइम मेरिडियन के पश्चिम में 122.1390293 डिग्री) है। + +![माइक्रोसॉफ्ट कैंपस 47.6423109,-122.117198 पर](../../../../../translated_images/microsoft-gps-location-world.a321d481b010f6adfcca139b2ba0adc53b79f58a540495b8e2ce7f779ea64bfe.hi.png) + +## ग्लोबल पोजिशनिंग सिस्टम (GPS) + +GPS सिस्टम पृथ्वी की परिक्रमा करने वाले कई उपग्रहों का उपयोग करके आपकी लोकेशन का पता लगाते हैं। आपने शायद GPS सिस्टम का उपयोग बिना इसे जाने किया होगा - अपने फोन पर Apple Maps या Google Maps जैसे मैपिंग ऐप में अपनी लोकेशन खोजने के लिए, या राइड-हेलिंग ऐप जैसे Uber या Lyft में अपनी सवारी की लोकेशन देखने के लिए, या अपनी कार में सैटेलाइट नेविगेशन (सैट-नेव) का उपयोग करते समय। + +> 🎓 'सैटेलाइट नेविगेशन' में उपयोग किए जाने वाले उपग्रह GPS उपग्रह हैं! + +GPS सिस्टम इस प्रकार काम करते हैं कि कई उपग्रह एक सिग्नल भेजते हैं जिसमें प्रत्येक उपग्रह की वर्तमान स्थिति और एक सटीक टाइमस्टैम्प होता है। ये सिग्नल रेडियो तरंगों के माध्यम से भेजे जाते हैं और GPS सेंसर में एक एंटीना द्वारा पता लगाए जाते हैं। GPS सेंसर इन सिग्नल्स का पता लगाता है, और वर्तमान समय का उपयोग करके मापता है कि सिग्नल को उपग्रह से सेंसर तक पहुंचने में कितना समय लगा। चूंकि रेडियो तरंगों की गति स्थिर होती है, GPS सेंसर भेजे गए टाइमस्टैम्प का उपयोग करके यह पता लगा सकता है कि सेंसर उपग्रह से कितनी दूर है। कम से कम 3 उपग्रहों से प्राप्त डेटा को उनके द्वारा भेजी गई स्थिति के साथ जोड़कर, GPS सेंसर पृथ्वी पर अपनी लोकेशन का पता लगा सकता है। + +> 💁 GPS सेंसर को रेडियो तरंगों का पता लगाने के लिए एंटीना की आवश्यकता होती है। ट्रकों और कारों में ऑन-बोर्ड GPS के साथ निर्मित एंटीना को अच्छी सिग्नल प्राप्त करने के लिए रखा जाता है, आमतौर पर विंडशील्ड या छत पर। यदि आप एक अलग GPS सिस्टम का उपयोग कर रहे हैं, जैसे स्मार्टफोन या IoT डिवाइस, तो आपको यह सुनिश्चित करना होगा कि GPS सिस्टम या फोन में निर्मित एंटीना का आकाश का स्पष्ट दृश्य हो, जैसे कि इसे विंडशील्ड पर माउंट करना। + +![सेंसर से कई उपग्रहों की दूरी जानकर लोकेशन की गणना की जा सकती है](../../../../../translated_images/gps-satellites.04acf1148fe25fbf1586bc2e8ba698e8d79b79a50c36824b38417dd13372b90f.hi.png) + +GPS उपग्रह पृथ्वी की परिक्रमा कर रहे हैं, सेंसर के ऊपर एक निश्चित बिंदु पर नहीं हैं, इसलिए लोकेशन डेटा में समुद्र तल से ऊंचाई के साथ-साथ अक्षांश और देशांतर भी शामिल होता है। + +GPS में पहले अमेरिकी सेना द्वारा लागू की गई सटीकता पर सीमाएं थीं, जिससे सटीकता लगभग 5 मीटर तक सीमित थी। यह सीमा 2000 में हटा दी गई, जिससे 30 सेंटीमीटर की सटीकता संभव हो गई। हालांकि, सिग्नल्स में हस्तक्षेप के कारण इस सटीकता को प्राप्त करना हमेशा संभव नहीं होता। + +✅ यदि आपके पास स्मार्टफोन है, तो मैपिंग ऐप लॉन्च करें और देखें कि आपकी लोकेशन कितनी सटीक है। आपके फोन को अधिक सटीक लोकेशन प्राप्त करने के लिए कई उपग्रहों का पता लगाने में थोड़ा समय लग सकता है। +💁 उपग्रहों में परमाणु घड़ियां होती हैं जो अत्यधिक सटीक होती हैं, लेकिन वे पृथ्वी पर मौजूद परमाणु घड़ियों की तुलना में प्रतिदिन 38 माइक्रोसेकंड (0.0000038 सेकंड) का अंतर करती हैं। यह अंतर आइंस्टीन के विशेष और सामान्य सापेक्षता सिद्धांतों के अनुसार गति बढ़ने पर समय धीमा होने के कारण होता है - उपग्रह पृथ्वी के घूर्णन से तेज गति से चलते हैं। इस अंतर का उपयोग विशेष और सामान्य सापेक्षता की भविष्यवाणियों को साबित करने के लिए किया गया है, और इसे GPS सिस्टम के डिज़ाइन में समायोजित करना पड़ता है। सचमुच, GPS उपग्रह पर समय धीमा चलता है। +GPS सिस्टम को कई देशों और राजनीतिक संघों द्वारा विकसित और लागू किया गया है, जिनमें अमेरिका, रूस, जापान, भारत, यूरोपीय संघ और चीन शामिल हैं। आधुनिक GPS सेंसर इन सभी सिस्टम्स से जुड़ सकते हैं ताकि तेज़ और अधिक सटीक डेटा प्राप्त किया जा सके। + +> 🎓 प्रत्येक सिस्टम में उपग्रहों के समूह को "कॉन्स्टेलेशन" कहा जाता है। + +## GPS सेंसर डेटा पढ़ें + +अधिकांश GPS सेंसर UART के माध्यम से GPS डेटा भेजते हैं। + +> ⚠️ UART को [प्रोजेक्ट 2, पाठ 2](../../../2-farm/lessons/2-detect-soil-moisture/README.md#universal-asynchronous-receiver-transmitter-uart) में कवर किया गया था। यदि आवश्यक हो, तो उस पाठ को फिर से देखें। + +आप अपने IoT डिवाइस पर GPS सेंसर का उपयोग करके GPS डेटा प्राप्त कर सकते हैं। + +### कार्य - GPS सेंसर कनेक्ट करें और GPS डेटा पढ़ें + +अपने IoT डिवाइस का उपयोग करके GPS डेटा पढ़ने के लिए संबंधित गाइड का पालन करें: + +* [Arduino - Wio Terminal](wio-terminal-gps-sensor.md) +* [सिंगल-बोर्ड कंप्यूटर - Raspberry Pi](pi-gps-sensor.md) +* [सिंगल-बोर्ड कंप्यूटर - वर्चुअल डिवाइस](virtual-device-gps-sensor.md) + +## NMEA GPS डेटा + +जब आपने अपना कोड चलाया, तो आपने आउटपुट में कुछ ऐसा देखा होगा जो बेतुका लग सकता है। वास्तव में, यह मानक GPS डेटा है, और इसका एक विशेष अर्थ होता है। + +GPS सेंसर NMEA संदेशों का उपयोग करके डेटा आउटपुट करते हैं, जो NMEA 0183 मानक का पालन करते हैं। NMEA का पूरा नाम है [नेशनल मरीन इलेक्ट्रॉनिक्स एसोसिएशन](https://www.nmea.org), जो एक अमेरिकी व्यापार संगठन है जो समुद्री इलेक्ट्रॉनिक्स के बीच संचार के लिए मानक निर्धारित करता है। + +> 💁 यह मानक स्वामित्व वाला है और इसकी कीमत कम से कम US$2,000 है, लेकिन इसके बारे में पर्याप्त जानकारी सार्वजनिक डोमेन में उपलब्ध है, जिससे अधिकांश मानक को रिवर्स इंजीनियर किया गया है और इसे ओपन सोर्स और अन्य गैर-व्यावसायिक कोड में उपयोग किया जा सकता है। + +ये संदेश टेक्स्ट-आधारित होते हैं। प्रत्येक संदेश एक *वाक्य* के रूप में होता है, जो `$` अक्षर से शुरू होता है, इसके बाद 2 अक्षर होते हैं जो संदेश के स्रोत को दर्शाते हैं (जैसे GP अमेरिकी GPS सिस्टम के लिए, GN रूसी GPS सिस्टम GLONASS के लिए), और 3 अक्षर जो संदेश के प्रकार को दर्शाते हैं। संदेश के बाकी हिस्से में कॉमा से अलग किए गए फ़ील्ड होते हैं, और यह एक नई पंक्ति के साथ समाप्त होता है। + +कुछ प्रकार के संदेश जो प्राप्त किए जा सकते हैं: + +| प्रकार | विवरण | +| ---- | ----------- | +| GGA | GPS फिक्स डेटा, जिसमें GPS सेंसर का अक्षांश, देशांतर और ऊंचाई शामिल है, साथ ही इस फिक्स को गणना करने के लिए दृश्य में उपग्रहों की संख्या। | +| ZDA | वर्तमान तिथि और समय, जिसमें स्थानीय समय क्षेत्र शामिल है। | +| GSV | दृश्य में उपग्रहों का विवरण - वे उपग्रह जिन्हें GPS सेंसर सिग्नल से पहचान सकता है। | + +> 💁 GPS डेटा में टाइम स्टैम्प शामिल होते हैं, इसलिए आपका IoT डिवाइस GPS सेंसर से समय प्राप्त कर सकता है, बजाय NTP सर्वर या आंतरिक रियल-टाइम क्लॉक पर निर्भर रहने के। + +GGA संदेश वर्तमान स्थान को `(dd)dmm.mmmm` प्रारूप में शामिल करता है, साथ ही दिशा को दर्शाने के लिए एक अक्षर। इस प्रारूप में `d` डिग्री है, `m` मिनट है, और सेकंड मिनट के दशमलव के रूप में होते हैं। उदाहरण के लिए, 2°17'43" को 217.716666667 के रूप में लिखा जाएगा - 2 डिग्री, 17.716666667 मिनट। + +दिशा अक्षर अक्षांश के लिए `N` या `S` हो सकता है, जो उत्तर या दक्षिण को दर्शाता है, और देशांतर के लिए `E` या `W`, जो पूर्व या पश्चिम को दर्शाता है। उदाहरण के लिए, 2°17'43" का अक्षांश `N` होगा, जबकि -2°17'43" का अक्षांश `S` होगा। + +उदाहरण के लिए - NMEA वाक्य `$GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67` + +* अक्षांश भाग `4738.538654,N` है, जो दशमलव डिग्री में 47.6423109 में परिवर्तित होता है। `4738.538654` का अर्थ है 47.6423109, और दिशा `N` (उत्तर) है, इसलिए यह एक सकारात्मक अक्षांश है। + +* देशांतर भाग `12208.341758,W` है, जो दशमलव डिग्री में -122.1390293 में परिवर्तित होता है। `12208.341758` का अर्थ है 122.1390293°, और दिशा `W` (पश्चिम) है, इसलिए यह एक नकारात्मक देशांतर है। + +## GPS सेंसर डेटा को डिकोड करें + +कच्चे NMEA डेटा का उपयोग करने के बजाय, इसे एक अधिक उपयोगी प्रारूप में डिकोड करना बेहतर होता है। कई ओपन-सोर्स लाइब्रेरी हैं जो कच्चे NMEA संदेशों से उपयोगी डेटा निकालने में मदद कर सकती हैं। + +### कार्य - GPS सेंसर डेटा को डिकोड करें + +अपने IoT डिवाइस का उपयोग करके GPS सेंसर डेटा को डिकोड करने के लिए संबंधित गाइड का पालन करें: + +* [Arduino - Wio Terminal](wio-terminal-gps-decode.md) +* [सिंगल-बोर्ड कंप्यूटर - Raspberry Pi/वर्चुअल IoT डिवाइस](single-board-computer-gps-decode.md) + +--- + +## 🚀 चुनौती + +अपना खुद का NMEA डिकोडर लिखें! तीसरे पक्ष की लाइब्रेरी पर निर्भर रहने के बजाय, क्या आप अपना खुद का डिकोडर लिख सकते हैं जो NMEA वाक्यों से अक्षांश और देशांतर निकाल सके? + +## पोस्ट-लेक्चर क्विज़ + +[पोस्ट-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/22) + +## समीक्षा और स्व-अध्ययन + +* [विकिपीडिया पर भौगोलिक समन्वय प्रणाली पृष्ठ](https://wikipedia.org/wiki/Geographic_coordinate_system) पर भू-स्थानिक समन्वय के बारे में और पढ़ें। +* पृथ्वी के अलावा अन्य खगोलीय पिंडों पर प्राइम मेरिडियन के बारे में [विकिपीडिया पर प्राइम मेरिडियन पृष्ठ](https://wikipedia.org/wiki/Prime_meridian#Prime_meridian_on_other_planetary_bodies) पर पढ़ें। +* विभिन्न विश्व सरकारों और राजनीतिक संघों जैसे यूरोपीय संघ, जापान, रूस, भारत और अमेरिका के विभिन्न GPS सिस्टम पर शोध करें। + +## असाइनमेंट + +[अन्य GPS डेटा की जांच करें](assignment.md) + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/3-transport/lessons/1-location-tracking/assignment.md b/translations/hi/3-transport/lessons/1-location-tracking/assignment.md new file mode 100644 index 00000000..dcf824d2 --- /dev/null +++ b/translations/hi/3-transport/lessons/1-location-tracking/assignment.md @@ -0,0 +1,27 @@ + +# अन्य GPS डेटा की जांच करें + +## निर्देश + +आपके GPS सेंसर से आने वाले NMEA वाक्यांशों में स्थान के अलावा अन्य डेटा भी होता है। इस अतिरिक्त डेटा की जांच करें और इसे अपने IoT डिवाइस में उपयोग करें। + +उदाहरण के लिए - क्या आप वर्तमान तारीख और समय प्राप्त कर सकते हैं? यदि आप एक माइक्रोकंट्रोलर का उपयोग कर रहे हैं, तो क्या आप GPS डेटा का उपयोग करके घड़ी को उसी तरह सेट कर सकते हैं जैसे आपने पिछले प्रोजेक्ट में NTP सिग्नल का उपयोग करके किया था? क्या आप ऊंचाई (समुद्र तल से अपनी ऊंचाई) या अपनी वर्तमान गति प्राप्त कर सकते हैं? + +यदि आप एक वर्चुअल IoT डिवाइस का उपयोग कर रहे हैं, तो आप कुछ डेटा [nmeagen.org](https://www.nmeagen.org) जैसे टूल का उपयोग करके उत्पन्न NMEA वाक्यांशों को भेजकर प्राप्त कर सकते हैं। + +## मूल्यांकन मानदंड + +| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | +| ------- | -------- | -------- | ----------------- | +| अधिक GPS डेटा प्राप्त करें | अधिक GPS डेटा प्राप्त करने और उसका उपयोग करने में सक्षम है, चाहे वह टेलीमेट्री के रूप में हो या IoT डिवाइस को सेट करने के लिए | अधिक GPS डेटा प्राप्त करने में सक्षम है, लेकिन उसका उपयोग करने में असमर्थ है | अधिक GPS डेटा प्राप्त करने में असमर्थ है | + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/3-transport/lessons/1-location-tracking/pi-gps-sensor.md b/translations/hi/3-transport/lessons/1-location-tracking/pi-gps-sensor.md new file mode 100644 index 00000000..64fb8cd2 --- /dev/null +++ b/translations/hi/3-transport/lessons/1-location-tracking/pi-gps-sensor.md @@ -0,0 +1,191 @@ + +# GPS डेटा पढ़ें - रास्पबेरी पाई + +इस पाठ के इस भाग में, आप अपने रास्पबेरी पाई में एक GPS सेंसर जोड़ेंगे और उससे डेटा पढ़ेंगे। + +## हार्डवेयर + +रास्पबेरी पाई को एक GPS सेंसर की आवश्यकता है। + +आप जो सेंसर उपयोग करेंगे वह [Grove GPS Air530 सेंसर](https://www.seeedstudio.com/Grove-GPS-Air530-p-4584.html) है। यह सेंसर कई GPS सिस्टम्स से जुड़ सकता है ताकि तेज़ और सटीक डेटा प्राप्त किया जा सके। यह सेंसर दो भागों से बना है - सेंसर का मुख्य इलेक्ट्रॉनिक्स और एक बाहरी एंटीना जो पतले तार से जुड़ा होता है ताकि सैटेलाइट्स से रेडियो तरंगें प्राप्त की जा सकें। + +यह एक UART सेंसर है, जो UART के माध्यम से GPS डेटा भेजता है। + +## GPS सेंसर को कनेक्ट करें + +Grove GPS सेंसर को रास्पबेरी पाई से जोड़ा जा सकता है। + +### कार्य - GPS सेंसर को कनेक्ट करें + +GPS सेंसर को कनेक्ट करें। + +![एक Grove GPS सेंसर](../../../../../translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.hi.png) + +1. Grove केबल का एक सिरा GPS सेंसर के सॉकेट में डालें। यह केवल एक ही दिशा में जाएगा। + +1. रास्पबेरी पाई को बंद करके, Grove केबल का दूसरा सिरा Grove बेस हैट पर **UART** नामक सॉकेट में कनेक्ट करें। यह सॉकेट मध्य पंक्ति में है, SD कार्ड स्लॉट के पास, USB पोर्ट्स और ईथरनेट सॉकेट के विपरीत दिशा में। + + ![UART सॉकेट से जुड़ा Grove GPS सेंसर](../../../../../translated_images/pi-gps-sensor.1f99ee2b2f6528915047ec78967bd362e0e4ee0ed594368a3837b9cf9cdaca64.hi.png) + +1. GPS सेंसर को इस तरह से रखें कि जुड़ा हुआ एंटीना आकाश को देख सके - आदर्श रूप से एक खुली खिड़की के पास या बाहर। एंटीना के रास्ते में कुछ भी न होने पर सिग्नल अधिक स्पष्ट रूप से प्राप्त होता है। + +## GPS सेंसर को प्रोग्राम करें + +अब रास्पबेरी पाई को जुड़े हुए GPS सेंसर का उपयोग करने के लिए प्रोग्राम किया जा सकता है। + +### कार्य - GPS सेंसर को प्रोग्राम करें + +डिवाइस को प्रोग्राम करें। + +1. पाई को चालू करें और इसके बूट होने की प्रतीक्षा करें। + +1. GPS सेंसर में 2 LED होती हैं - एक नीली LED जो डेटा ट्रांसमिट होने पर चमकती है, और एक हरी LED जो सैटेलाइट्स से डेटा प्राप्त होने पर हर सेकंड चमकती है। सुनिश्चित करें कि पाई चालू करने पर नीली LED चमक रही हो। कुछ मिनटों के बाद हरी LED चमकने लगेगी - यदि ऐसा नहीं होता है, तो आपको एंटीना को पुनः स्थिति में रखना पड़ सकता है। + +1. VS Code लॉन्च करें, या तो सीधे पाई पर, या Remote SSH एक्सटेंशन के माध्यम से कनेक्ट करें। + + > ⚠️ यदि आवश्यक हो, तो [पाठ 1 में VS Code सेटअप और लॉन्च करने के निर्देशों का संदर्भ लें](../../../1-getting-started/lessons/1-introduction-to-iot/pi.md)। + +1. रास्पबेरी पाई के नए संस्करणों में जो ब्लूटूथ का समर्थन करते हैं, ब्लूटूथ के लिए उपयोग किए जाने वाले सीरियल पोर्ट और Grove UART पोर्ट के लिए उपयोग किए जाने वाले पोर्ट के बीच एक संघर्ष होता है। इसे ठीक करने के लिए निम्नलिखित करें: + + 1. VS Code टर्मिनल से, `/boot/config.txt` फ़ाइल को `nano` का उपयोग करके संपादित करें, जो एक अंतर्निहित टर्मिनल टेक्स्ट एडिटर है, निम्नलिखित कमांड के साथ: + + ```sh + sudo nano /boot/config.txt + ``` + + > इस फ़ाइल को VS Code द्वारा संपादित नहीं किया जा सकता क्योंकि इसे `sudo` अनुमतियों, यानी उन्नत अनुमतियों के साथ संपादित करने की आवश्यकता है। VS Code इन अनुमतियों के साथ नहीं चलता। + + 1. कर्सर कुंजियों का उपयोग करके फ़ाइल के अंत तक जाएं। फिर नीचे दिए गए कोड को कॉपी करें और इसे फ़ाइल के अंत में पेस्ट करें: + + ```ini + dtoverlay=pi3-miniuart-bt + dtoverlay=pi3-disable-bt + enable_uart=1 + ``` + + आप अपने डिवाइस के सामान्य कीबोर्ड शॉर्टकट का उपयोग करके पेस्ट कर सकते हैं (`Ctrl+v` Windows, Linux या Raspberry Pi OS पर, `Cmd+v` macOS पर)। + + 1. इस फ़ाइल को सहेजें और `Ctrl+x` दबाकर nano से बाहर निकलें। जब पूछा जाए कि क्या आप संशोधित बफर को सहेजना चाहते हैं, तो `y` दबाएं, फिर `/boot/config.txt` को ओवरराइट करने की पुष्टि करने के लिए `enter` दबाएं। + + > यदि आप कोई गलती करते हैं, तो बिना सहेजे बाहर निकल सकते हैं और फिर इन चरणों को दोहरा सकते हैं। + + 1. `/boot/cmdline.txt` फ़ाइल को nano में निम्नलिखित कमांड के साथ संपादित करें: + + ```sh + sudo nano /boot/cmdline.txt + ``` + + 1. इस फ़ाइल में कई key/value जोड़े होते हैं जो स्पेस से अलग होते हैं। `console` key के लिए किसी भी key/value जोड़े को हटा दें। वे संभवतः इस तरह दिखेंगे: + + ```output + console=serial0,115200 console=tty1 + ``` + + आप कर्सर कुंजियों का उपयोग करके इन प्रविष्टियों पर जा सकते हैं, फिर सामान्य `del` या `backspace` कुंजियों का उपयोग करके हटा सकते हैं। + + उदाहरण के लिए, यदि आपकी मूल फ़ाइल इस तरह दिखती है: + + ```output + console=serial0,115200 console=tty1 root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait + ``` + + नई संस्करण इस तरह होगा: + + ```output + root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait + ``` + + 1. ऊपर दिए गए चरणों का पालन करके इस फ़ाइल को सहेजें और nano से बाहर निकलें। + + 1. अपने पाई को पुनः चालू करें, फिर पाई के पुनः चालू होने के बाद VS Code में पुनः कनेक्ट करें। + +1. टर्मिनल से, `pi` उपयोगकर्ता के होम डायरेक्टरी में एक नया फ़ोल्डर बनाएं जिसका नाम `gps-sensor` हो। इस फ़ोल्डर में `app.py` नामक एक फ़ाइल बनाएं। + +1. इस फ़ोल्डर को VS Code में खोलें। + +1. GPS मॉड्यूल UART डेटा को सीरियल पोर्ट के माध्यम से भेजता है। Python कोड से सीरियल पोर्ट के साथ संवाद करने के लिए `pyserial` Pip पैकेज इंस्टॉल करें: + + ```sh + pip3 install pyserial + ``` + +1. अपने `app.py` फ़ाइल में निम्नलिखित कोड जोड़ें: + + ```python + import time + import serial + + serial = serial.Serial('/dev/ttyAMA0', 9600, timeout=1) + serial.reset_input_buffer() + serial.flush() + + def print_gps_data(line): + print(line.rstrip()) + + while True: + line = serial.readline().decode('utf-8') + + while len(line) > 0: + print_gps_data(line) + line = serial.readline().decode('utf-8') + + time.sleep(1) + ``` + + यह कोड `pyserial` Pip पैकेज से `serial` मॉड्यूल को आयात करता है। फिर यह `/dev/ttyAMA0` सीरियल पोर्ट से जुड़ता है - यह वह पता है जो Grove Pi Base Hat अपने UART पोर्ट के लिए उपयोग करता है। इसके बाद यह इस सीरियल कनेक्शन से किसी भी मौजूदा डेटा को साफ करता है। + + इसके बाद एक `print_gps_data` नामक फ़ंक्शन परिभाषित किया जाता है जो पास की गई लाइन को कंसोल पर प्रिंट करता है। + + इसके बाद कोड हमेशा के लिए लूप करता है, प्रत्येक लूप में सीरियल पोर्ट से जितनी लाइनों का टेक्स्ट पढ़ सकता है उतना पढ़ता है। यह प्रत्येक लाइन के लिए `print_gps_data` फ़ंक्शन को कॉल करता है। + + सभी डेटा पढ़ने के बाद, लूप 1 सेकंड के लिए सोता है, फिर पुनः प्रयास करता है। + +1. इस कोड को चलाएं। आपको GPS सेंसर से कच्चा आउटपुट दिखाई देगा, कुछ इस तरह: + + ```output + $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 + $GPGSA,A,1,,,,,,,,,,,,,,,*1E + $BDGSA,A,1,,,,,,,,,,,,,,,*0F + $GPGSV,1,1,00*79 + $BDGSV,1,1,00*68 + ``` + + > यदि आप कोड को रोकने और पुनः शुरू करने पर निम्नलिखित त्रुटियों में से कोई एक प्राप्त करते हैं, तो अपने while लूप में एक `try - except` ब्लॉक जोड़ें। + + ```output + UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 0: invalid start byte + UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf1 in position 0: invalid continuation byte + ``` + + ```python + while True: + try: + line = serial.readline().decode('utf-8') + + while len(line) > 0: + print_gps_data() + line = serial.readline().decode('utf-8') + + # There's a random chance the first byte being read is part way through a character. + # Read another full line and continue. + + except UnicodeDecodeError: + line = serial.readline().decode('utf-8') + + time.sleep(1) + ``` + +> 💁 आप इस कोड को [code-gps/pi](../../../../../3-transport/lessons/1-location-tracking/code-gps/pi) फ़ोल्डर में पा सकते हैं। + +😀 आपका GPS सेंसर प्रोग्राम सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/3-transport/lessons/1-location-tracking/single-board-computer-gps-decode.md b/translations/hi/3-transport/lessons/1-location-tracking/single-board-computer-gps-decode.md new file mode 100644 index 00000000..4eda2486 --- /dev/null +++ b/translations/hi/3-transport/lessons/1-location-tracking/single-board-computer-gps-decode.md @@ -0,0 +1,73 @@ + +# जीपीएस डेटा डिकोड करें - वर्चुअल IoT हार्डवेयर और रास्पबेरी पाई + +इस पाठ के इस भाग में, आप रास्पबेरी पाई या वर्चुअल IoT डिवाइस द्वारा जीपीएस सेंसर से पढ़े गए NMEA संदेशों को डिकोड करेंगे और अक्षांश और देशांतर निकालेंगे। + +## जीपीएस डेटा डिकोड करें + +एक बार जब कच्चा NMEA डेटा सीरियल पोर्ट से पढ़ लिया जाता है, तो इसे एक ओपन सोर्स NMEA लाइब्रेरी का उपयोग करके डिकोड किया जा सकता है। + +### कार्य - जीपीएस डेटा डिकोड करें + +डिवाइस को जीपीएस डेटा डिकोड करने के लिए प्रोग्राम करें। + +1. `gps-sensor` ऐप प्रोजेक्ट खोलें, अगर यह पहले से खुला नहीं है। + +1. `pynmea2` पिप पैकेज इंस्टॉल करें। इस पैकेज में NMEA संदेशों को डिकोड करने के लिए कोड है। + + ```sh + pip3 install pynmea2 + ``` + +1. `app.py` फाइल में इम्पोर्ट्स में निम्नलिखित कोड जोड़ें ताकि `pynmea2` मॉड्यूल को इम्पोर्ट किया जा सके: + + ```python + import pynmea2 + ``` + +1. `print_gps_data` फंक्शन की सामग्री को निम्नलिखित कोड से बदलें: + + ```python + msg = pynmea2.parse(line) + if msg.sentence_type == 'GGA': + lat = pynmea2.dm_to_sd(msg.lat) + lon = pynmea2.dm_to_sd(msg.lon) + + if msg.lat_dir == 'S': + lat = lat * -1 + + if msg.lon_dir == 'W': + lon = lon * -1 + + print(f'{lat},{lon} - from {msg.num_sats} satellites') + ``` + + यह कोड `pynmea2` लाइब्रेरी का उपयोग करके UART सीरियल पोर्ट से पढ़ी गई लाइन को पार्स करेगा। + + यदि संदेश का वाक्य प्रकार `GGA` है, तो यह एक पोजीशन फिक्स संदेश है और इसे प्रोसेस किया जाएगा। अक्षांश और देशांतर मान संदेश से पढ़े जाते हैं और NMEA `(d)ddmm.mmmm` प्रारूप से दशमलव डिग्री में परिवर्तित किए जाते हैं। `dm_to_sd` फंक्शन यह रूपांतरण करता है। + + फिर अक्षांश की दिशा की जांच की जाती है, और यदि अक्षांश दक्षिण है, तो मान को नकारात्मक संख्या में परिवर्तित किया जाता है। इसी तरह, यदि देशांतर पश्चिम है, तो इसे नकारात्मक संख्या में परिवर्तित किया जाता है। + + अंत में, निर्देशांक को कंसोल पर प्रिंट किया जाता है, साथ ही स्थान प्राप्त करने के लिए उपयोग किए गए उपग्रहों की संख्या भी प्रिंट की जाती है। + +1. कोड चलाएं। यदि आप वर्चुअल IoT डिवाइस का उपयोग कर रहे हैं, तो सुनिश्चित करें कि CounterFit ऐप चल रहा है और जीपीएस डेटा भेजा जा रहा है। + + ```output + pi@raspberrypi:~/gps-sensor $ python3 app.py + 47.6423109,-122.1390293 - from 3 satellites + ``` + +> 💁 आप इस कोड को [code-gps-decode/virtual-device](../../../../../3-transport/lessons/1-location-tracking/code-gps-decode/virtual-device) फोल्डर में, या [code-gps-decode/pi](../../../../../3-transport/lessons/1-location-tracking/code-gps-decode/pi) फोल्डर में पा सकते हैं। + +😀 आपका जीपीएस सेंसर प्रोग्राम डेटा डिकोडिंग के साथ सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/3-transport/lessons/1-location-tracking/virtual-device-gps-sensor.md b/translations/hi/3-transport/lessons/1-location-tracking/virtual-device-gps-sensor.md new file mode 100644 index 00000000..39fbd03d --- /dev/null +++ b/translations/hi/3-transport/lessons/1-location-tracking/virtual-device-gps-sensor.md @@ -0,0 +1,142 @@ + +# GPS डेटा पढ़ें - वर्चुअल IoT हार्डवेयर + +इस पाठ के इस भाग में, आप अपने वर्चुअल IoT डिवाइस में एक GPS सेंसर जोड़ेंगे और इससे मान पढ़ेंगे। + +## वर्चुअल हार्डवेयर + +वर्चुअल IoT डिवाइस एक सिम्युलेटेड GPS सेंसर का उपयोग करेगा, जो UART के माध्यम से एक सीरियल पोर्ट पर उपलब्ध है। + +एक भौतिक GPS सेंसर में GPS सैटेलाइट्स से रेडियो तरंगों को पकड़ने के लिए एक एंटीना होता है, और GPS सिग्नल को GPS डेटा में बदलता है। इसका वर्चुअल संस्करण इसे सिम्युलेट करता है, जिससे आप या तो लैटिट्यूड और लॉन्गिट्यूड सेट कर सकते हैं, कच्चे NMEA वाक्य भेज सकते हैं, या एक GPX फ़ाइल अपलोड कर सकते हैं जिसमें कई स्थान होते हैं जो क्रमिक रूप से लौटाए जा सकते हैं। + +> 🎓 NMEA वाक्य इस पाठ में बाद में कवर किए जाएंगे + +### सेंसर को CounterFit में जोड़ें + +वर्चुअल GPS सेंसर का उपयोग करने के लिए, आपको इसे CounterFit ऐप में जोड़ना होगा। + +#### कार्य - सेंसर को CounterFit में जोड़ें + +GPS सेंसर को CounterFit ऐप में जोड़ें। + +1. अपने कंप्यूटर पर `gps-sensor` नामक एक फ़ोल्डर में एक नया Python ऐप बनाएं, जिसमें एक फ़ाइल `app.py` और एक Python वर्चुअल एनवायरनमेंट हो, और CounterFit pip पैकेज जोड़ें। + + > ⚠️ यदि आवश्यक हो, तो [पाठ 1 में CounterFit Python प्रोजेक्ट बनाने और सेटअप करने के निर्देशों का संदर्भ लें](../../../1-getting-started/lessons/1-introduction-to-iot/virtual-device.md)। + +1. एक अतिरिक्त Pip पैकेज इंस्टॉल करें जो UART आधारित सेंसर से सीरियल कनेक्शन के माध्यम से बात करने के लिए CounterFit शिम इंस्टॉल करता है। सुनिश्चित करें कि आप इसे उस टर्मिनल से इंस्टॉल कर रहे हैं जिसमें वर्चुअल एनवायरनमेंट सक्रिय है। + + ```sh + pip install counterfit-shims-serial + ``` + +1. सुनिश्चित करें कि CounterFit वेब ऐप चल रहा है। + +1. एक GPS सेंसर बनाएं: + + 1. *Sensors* पैन में *Create sensor* बॉक्स में, *Sensor type* ड्रॉपडाउन करें और *UART GPS* चुनें। + + 1. *Port* को */dev/ttyAMA0* पर सेट रहने दें। + + 1. **Add** बटन चुनें ताकि `/dev/ttyAMA0` पोर्ट पर GPS सेंसर बनाया जा सके। + + ![GPS सेंसर सेटिंग्स](../../../../../translated_images/counterfit-create-gps-sensor.6385dc9357d85ad1d47b4abb2525e7651fd498917d25eefc5a72feab09eedc70.hi.png) + + GPS सेंसर बनाया जाएगा और सेंसर सूची में दिखाई देगा। + + ![GPS सेंसर बनाया गया](../../../../../translated_images/counterfit-gps-sensor.3fbb15af0a5367566f2f11324ef5a6f30861cdf2b497071a5e002b7aa473550e.hi.png) + +## GPS सेंसर को प्रोग्राम करें + +अब वर्चुअल IoT डिवाइस को वर्चुअल GPS सेंसर का उपयोग करने के लिए प्रोग्राम किया जा सकता है। + +### कार्य - GPS सेंसर को प्रोग्राम करें + +GPS सेंसर ऐप को प्रोग्राम करें। + +1. सुनिश्चित करें कि `gps-sensor` ऐप VS Code में खुला है। + +1. `app.py` फ़ाइल खोलें। + +1. CounterFit से ऐप को कनेक्ट करने के लिए `app.py` के शीर्ष पर निम्न कोड जोड़ें: + + ```python + from counterfit_connection import CounterFitConnection + CounterFitConnection.init('127.0.0.1', 5000) + ``` + +1. इसके नीचे कुछ आवश्यक लाइब्रेरी आयात करने के लिए निम्न कोड जोड़ें, जिसमें CounterFit सीरियल पोर्ट के लिए लाइब्रेरी शामिल है: + + ```python + import time + import counterfit_shims_serial + + serial = counterfit_shims_serial.Serial('/dev/ttyAMA0') + ``` + + यह कोड `counterfit_shims_serial` Pip पैकेज से `serial` मॉड्यूल आयात करता है। फिर यह `/dev/ttyAMA0` सीरियल पोर्ट से कनेक्ट करता है - यह वह पता है जहां वर्चुअल GPS सेंसर अपने UART पोर्ट के लिए उपयोग करता है। + +1. इसके नीचे निम्न कोड जोड़ें ताकि सीरियल पोर्ट से डेटा पढ़ा जा सके और कंसोल पर प्रिंट किया जा सके: + + ```python + def print_gps_data(line): + print(line.rstrip()) + + while True: + line = serial.readline().decode('utf-8') + + while len(line) > 0: + print_gps_data(line) + line = serial.readline().decode('utf-8') + + time.sleep(1) + ``` + + एक फ़ंक्शन `print_gps_data` परिभाषित किया गया है जो कंसोल पर पास की गई लाइन को प्रिंट करता है। + + इसके बाद कोड हमेशा के लिए लूप करता है, प्रत्येक लूप में सीरियल पोर्ट से जितनी लाइनें संभव हो उतनी पढ़ता है। यह प्रत्येक लाइन के लिए `print_gps_data` फ़ंक्शन को कॉल करता है। + + सभी डेटा पढ़ने के बाद, लूप 1 सेकंड के लिए सोता है और फिर से प्रयास करता है। + +1. इस कोड को चलाएं, यह सुनिश्चित करते हुए कि आप एक अलग टर्मिनल का उपयोग कर रहे हैं जिसमें CounterFit ऐप चल रहा है, ताकि CounterFit ऐप चालू रहे। + +1. CounterFit ऐप से GPS सेंसर का मान बदलें। आप इसे निम्न तरीकों में से किसी एक में कर सकते हैं: + + * **Source** को `Lat/Lon` पर सेट करें, और एक स्पष्ट लैटिट्यूड, लॉन्गिट्यूड और GPS फिक्स प्राप्त करने के लिए उपयोग किए गए सैटेलाइट्स की संख्या सेट करें। यह मान केवल एक बार भेजा जाएगा, इसलिए **Repeat** बॉक्स को चेक करें ताकि डेटा हर सेकंड दोहराया जा सके। + + ![GPS सेंसर लैट लॉन के साथ चुना गया](../../../../../translated_images/counterfit-gps-sensor-latlon.008c867d75464fbe7f84107cc57040df565ac07cb57d2f21db37d087d470197d.hi.png) + + * **Source** को `NMEA` पर सेट करें और कुछ NMEA वाक्य टेक्स्ट बॉक्स में जोड़ें। ये सभी मान भेजे जाएंगे, प्रत्येक नए GGA (पोजिशन फिक्स) वाक्य को पढ़ने से पहले 1 सेकंड की देरी होगी। + + ![GPS सेंसर NMEA वाक्य के साथ सेट किया गया](../../../../../translated_images/counterfit-gps-sensor-nmea.c62eea442171e17e19528b051b104cfcecdc9cd18db7bc72920f29821ae63f73.hi.png) + + आप [nmeagen.org](https://www.nmeagen.org) जैसे टूल का उपयोग करके इन वाक्यों को मैप पर ड्रॉ करके जनरेट कर सकते हैं। ये मान केवल एक बार भेजे जाएंगे, इसलिए **Repeat** बॉक्स को चेक करें ताकि डेटा एक सेकंड बाद फिर से भेजा जा सके। + + * **Source** को GPX फ़ाइल पर सेट करें और ट्रैक लोकेशन के साथ एक GPX फ़ाइल अपलोड करें। आप [AllTrails](https://www.alltrails.com/) जैसे लोकप्रिय मैपिंग और हाइकिंग साइट्स से GPX फ़ाइलें डाउनलोड कर सकते हैं। इन फ़ाइलों में एक ट्रेल के रूप में कई GPS लोकेशन होती हैं, और GPS सेंसर प्रत्येक नई लोकेशन को 1 सेकंड के अंतराल पर लौटाएगा। + + ![GPS सेंसर GPX फ़ाइल के साथ सेट किया गया](../../../../../translated_images/counterfit-gps-sensor-gpxfile.8310b063ce8a425ccc8ebeec8306aeac5e8e55207f007d52c6e1194432a70cd9.hi.png) + + ये मान केवल एक बार भेजे जाएंगे, इसलिए **Repeat** बॉक्स को चेक करें ताकि डेटा एक सेकंड बाद फिर से भेजा जा सके। + + एक बार जब आप GPS सेटिंग्स को कॉन्फ़िगर कर लें, तो इन मानों को सेंसर पर लागू करने के लिए **Set** बटन चुनें। + +1. आप GPS सेंसर से कच्चा आउटपुट देखेंगे, कुछ इस तरह: + + ```output + $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 + $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 + ``` + +> 💁 आप इस कोड को [code-gps/virtual-device](../../../../../3-transport/lessons/1-location-tracking/code-gps/virtual-device) फ़ोल्डर में पा सकते हैं। + +😀 आपका GPS सेंसर प्रोग्राम सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/3-transport/lessons/1-location-tracking/wio-terminal-gps-decode.md b/translations/hi/3-transport/lessons/1-location-tracking/wio-terminal-gps-decode.md new file mode 100644 index 00000000..704a684a --- /dev/null +++ b/translations/hi/3-transport/lessons/1-location-tracking/wio-terminal-gps-decode.md @@ -0,0 +1,81 @@ + +# GPS डेटा डिकोड करें - Wio Terminal + +इस पाठ के इस भाग में, आप Wio Terminal द्वारा GPS सेंसर से पढ़े गए NMEA संदेशों को डिकोड करेंगे और अक्षांश और देशांतर निकालेंगे। + +## GPS डेटा डिकोड करें + +एक बार जब कच्चा NMEA डेटा सीरियल पोर्ट से पढ़ लिया जाता है, तो इसे एक ओपन सोर्स NMEA लाइब्रेरी का उपयोग करके डिकोड किया जा सकता है। + +### कार्य - GPS डेटा डिकोड करें + +डिवाइस को GPS डेटा डिकोड करने के लिए प्रोग्राम करें। + +1. यदि `gps-sensor` ऐप प्रोजेक्ट पहले से खुला नहीं है, तो इसे खोलें। + +1. प्रोजेक्ट के `platformio.ini` फाइल में [TinyGPSPlus](https://github.com/mikalhart/TinyGPSPlus) लाइब्रेरी के लिए एक लाइब्रेरी डिपेंडेंसी जोड़ें। इस लाइब्रेरी में NMEA डेटा डिकोड करने के लिए कोड है। + + ```ini + lib_deps = + mikalhart/TinyGPSPlus @ 1.0.2 + ``` + +1. `main.cpp` में, TinyGPSPlus लाइब्रेरी के लिए एक include निर्देश जोड़ें: + + ```cpp + #include + ``` + +1. `Serial3` की घोषणा के नीचे, NMEA वाक्यों को प्रोसेस करने के लिए एक TinyGPSPlus ऑब्जेक्ट घोषित करें: + + ```cpp + TinyGPSPlus gps; + ``` + +1. `printGPSData` फ़ंक्शन की सामग्री को निम्नलिखित में बदलें: + + ```cpp + if (gps.encode(Serial3.read())) + { + if (gps.location.isValid()) + { + Serial.print(gps.location.lat(), 6); + Serial.print(F(",")); + Serial.print(gps.location.lng(), 6); + Serial.print(" - from "); + Serial.print(gps.satellites.value()); + Serial.println(" satellites"); + } + } + ``` + + यह कोड UART सीरियल पोर्ट से अगला कैरेक्टर `gps` NMEA डिकोडर में पढ़ता है। प्रत्येक कैरेक्टर के बाद, यह जांचता है कि डिकोडर ने एक वैध वाक्य पढ़ा है या नहीं, फिर यह जांचता है कि क्या उसने एक वैध स्थान पढ़ा है। यदि स्थान वैध है, तो यह इसे सीरियल मॉनिटर पर भेजता है, साथ ही उन उपग्रहों की संख्या के साथ जिन्होंने इस फिक्स में योगदान दिया। + +1. कोड को Wio Terminal पर बिल्ड और अपलोड करें। + +1. अपलोड हो जाने के बाद, आप सीरियल मॉनिटर का उपयोग करके GPS स्थान डेटा की निगरानी कर सकते हैं। + + ```output + > Executing task: platformio device monitor < + + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem1201 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + 47.6423109,-122.1390293 - from 3 satellites + ``` + +> 💁 आप इस कोड को [code-gps-decode/wio-terminal](../../../../../3-transport/lessons/1-location-tracking/code-gps-decode/wio-terminal) फ़ोल्डर में पा सकते हैं। + +😀 आपका GPS सेंसर प्रोग्राम डेटा डिकोडिंग के साथ सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/3-transport/lessons/1-location-tracking/wio-terminal-gps-sensor.md b/translations/hi/3-transport/lessons/1-location-tracking/wio-terminal-gps-sensor.md new file mode 100644 index 00000000..4947cfe5 --- /dev/null +++ b/translations/hi/3-transport/lessons/1-location-tracking/wio-terminal-gps-sensor.md @@ -0,0 +1,152 @@ + +# GPS डेटा पढ़ें - Wio Terminal + +इस पाठ के इस भाग में, आप अपने Wio Terminal में एक GPS सेंसर जोड़ेंगे और उससे मान पढ़ेंगे। + +## हार्डवेयर + +Wio Terminal को एक GPS सेंसर की आवश्यकता है। + +आप जो सेंसर उपयोग करेंगे वह [Grove GPS Air530 सेंसर](https://www.seeedstudio.com/Grove-GPS-Air530-p-4584.html) है। यह सेंसर कई GPS सिस्टम्स से जुड़ सकता है ताकि तेज़ और सटीक डेटा प्राप्त किया जा सके। सेंसर दो भागों से बना है - सेंसर के मुख्य इलेक्ट्रॉनिक्स और एक बाहरी एंटीना जो पतले तार से जुड़ा होता है ताकि सैटेलाइट्स से रेडियो तरंगें प्राप्त की जा सकें। + +यह एक UART सेंसर है, जो UART के माध्यम से GPS डेटा भेजता है। + +### GPS सेंसर को कनेक्ट करें + +Grove GPS सेंसर को Wio Terminal से जोड़ा जा सकता है। + +#### कार्य - GPS सेंसर को कनेक्ट करें + +GPS सेंसर को कनेक्ट करें। + +![एक Grove GPS सेंसर](../../../../../translated_images/grove-gps-sensor.247943bf69b03f0d1820ef6ed10c587f9b650e8db55b936851c92412180bd3e2.hi.png) + +1. Grove केबल का एक सिरा GPS सेंसर के सॉकेट में डालें। यह केवल एक ही दिशा में जाएगा। + +1. Wio Terminal को आपके कंप्यूटर या अन्य पावर सप्लाई से डिस्कनेक्ट करके, Grove केबल का दूसरा सिरा Wio Terminal के स्क्रीन की ओर देखते हुए बाएं तरफ के Grove सॉकेट में कनेक्ट करें। यह सॉकेट पावर बटन के सबसे करीब है। + + ![बाएं सॉकेट में कनेक्ट किया गया Grove GPS सेंसर](../../../../../translated_images/wio-gps-sensor.19fd52b81ce58095d5deb3d4e5a1fdd88818d76569b00b1f0d740c92dc986525.hi.png) + +1. GPS सेंसर को इस तरह से रखें कि जुड़ा हुआ एंटीना आकाश को देख सके - आदर्श रूप से एक खुले खिड़की के पास या बाहर। एंटीना के रास्ते में कुछ भी न होने पर सिग्नल अधिक स्पष्ट रूप से प्राप्त होता है। + +1. अब आप Wio Terminal को अपने कंप्यूटर से कनेक्ट कर सकते हैं। + +1. GPS सेंसर में 2 LEDs होती हैं - एक नीली LED जो डेटा ट्रांसमिट होने पर चमकती है, और एक हरी LED जो सैटेलाइट्स से डेटा प्राप्त करने पर हर सेकंड चमकती है। सुनिश्चित करें कि Wio Terminal को पावर देने पर नीली LED चमक रही हो। कुछ मिनटों के बाद हरी LED चमकने लगेगी - अगर ऐसा नहीं होता है, तो आपको एंटीना को पुनः स्थिति में रखना पड़ सकता है। + +## GPS सेंसर को प्रोग्राम करें + +अब Wio Terminal को जुड़े हुए GPS सेंसर का उपयोग करने के लिए प्रोग्राम किया जा सकता है। + +### कार्य - GPS सेंसर को प्रोग्राम करें + +डिवाइस को प्रोग्राम करें। + +1. PlatformIO का उपयोग करके एक नया Wio Terminal प्रोजेक्ट बनाएं। इस प्रोजेक्ट का नाम `gps-sensor` रखें। `setup` फंक्शन में सीरियल पोर्ट को कॉन्फ़िगर करने के लिए कोड जोड़ें। + +1. `main.cpp` फाइल के शीर्ष पर निम्नलिखित include निर्देश जोड़ें। यह एक हेडर फाइल को शामिल करता है जिसमें UART के लिए बाएं Grove पोर्ट को कॉन्फ़िगर करने के लिए फंक्शन होते हैं। + + ```cpp + #include + ``` + +1. इसके नीचे, UART पोर्ट के लिए सीरियल पोर्ट कनेक्शन घोषित करने के लिए निम्नलिखित कोड जोड़ें: + + ```cpp + static Uart Serial3(&sercom3, PIN_WIRE_SCL, PIN_WIRE_SDA, SERCOM_RX_PAD_1, UART_TX_PAD_0); + ``` + +1. आपको कुछ आंतरिक सिग्नल हैंडलर्स को इस सीरियल पोर्ट पर रीडायरेक्ट करने के लिए कोड जोड़ने की आवश्यकता है। `Serial3` घोषणा के नीचे निम्नलिखित कोड जोड़ें: + + ```cpp + void SERCOM3_0_Handler() + { + Serial3.IrqHandler(); + } + + void SERCOM3_1_Handler() + { + Serial3.IrqHandler(); + } + + void SERCOM3_2_Handler() + { + Serial3.IrqHandler(); + } + + void SERCOM3_3_Handler() + { + Serial3.IrqHandler(); + } + ``` + +1. `setup` फंक्शन में, जहां `Serial` पोर्ट कॉन्फ़िगर किया गया है, UART सीरियल पोर्ट को निम्नलिखित कोड के साथ कॉन्फ़िगर करें: + + ```cpp + Serial3.begin(9600); + + while (!Serial3) + ; // Wait for Serial3 to be ready + + delay(1000); + ``` + +1. `setup` फंक्शन में इस कोड के नीचे, Grove पिन को सीरियल पोर्ट से कनेक्ट करने के लिए निम्नलिखित कोड जोड़ें: + + ```cpp + pinPeripheral(PIN_WIRE_SCL, PIO_SERCOM_ALT); + ``` + +1. `loop` फंक्शन से पहले निम्नलिखित फंक्शन जोड़ें ताकि GPS डेटा को सीरियल मॉनिटर पर भेजा जा सके: + + ```cpp + void printGPSData() + { + Serial.println(Serial3.readStringUntil('\n')); + } + ``` + +1. `loop` फंक्शन में, UART सीरियल पोर्ट से डेटा पढ़ने और इसे सीरियल मॉनिटर पर प्रिंट करने के लिए निम्नलिखित कोड जोड़ें: + + ```cpp + while (Serial3.available() > 0) + { + printGPSData(); + } + + delay(1000); + ``` + + यह कोड UART सीरियल पोर्ट से डेटा पढ़ता है। `readStringUntil` फंक्शन एक टर्मिनेटर कैरेक्टर तक पढ़ता है, इस मामले में एक नई लाइन। यह एक पूरा NMEA वाक्य पढ़ेगा (NMEA वाक्य नई लाइन कैरेक्टर के साथ समाप्त होते हैं)। जब तक UART सीरियल पोर्ट से डेटा पढ़ा जा सकता है, इसे पढ़ा जाता है और `printGPSData` फंक्शन के माध्यम से सीरियल मॉनिटर पर भेजा जाता है। जब और डेटा पढ़ा नहीं जा सकता, तो `loop` 1 सेकंड (1,000ms) के लिए देरी करता है। + +1. कोड को Wio Terminal पर बिल्ड और अपलोड करें। + +1. अपलोड करने के बाद, आप सीरियल मॉनिटर का उपयोग करके GPS डेटा की निगरानी कर सकते हैं। + + ```output + > Executing task: platformio device monitor < + + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem1201 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 + $GPGSA,A,1,,,,,,,,,,,,,,,*1E + $BDGSA,A,1,,,,,,,,,,,,,,,*0F + $GPGSV,1,1,00*79 + $BDGSV,1,1,00*68 + ``` + +> 💁 आप इस कोड को [code-gps/wio-terminal](../../../../../3-transport/lessons/1-location-tracking/code-gps/wio-terminal) फोल्डर में पा सकते हैं। + +😀 आपका GPS सेंसर प्रोग्राम सफल रहा! + +**अस्वीकरण**: +यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/3-transport/lessons/2-store-location-data/README.md b/translations/hi/3-transport/lessons/2-store-location-data/README.md new file mode 100644 index 00000000..a985f76b --- /dev/null +++ b/translations/hi/3-transport/lessons/2-store-location-data/README.md @@ -0,0 +1,477 @@ + +# स्टोर लोकेशन डेटा + +![इस पाठ का स्केच नोट अवलोकन](../../../../../translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.hi.jpg) + +> स्केच नोट [नित्या नरसिम्हन](https://github.com/nitya) द्वारा। बड़े संस्करण के लिए छवि पर क्लिक करें। + +## प्री-लेक्चर क्विज़ + +[प्री-लेक्चर क्विज़](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/23) + +## परिचय + +पिछले पाठ में, आपने सीखा कि GPS सेंसर का उपयोग करके लोकेशन डेटा कैसे कैप्चर किया जाता है। इस डेटा का उपयोग ट्रक की लोकेशन और उसकी यात्रा को विज़ुअलाइज़ करने के लिए किया जा सकता है, लेकिन इसे क्लाउड में IoT सेवा पर भेजने और कहीं स्टोर करने की आवश्यकता होती है। + +इस पाठ में आप IoT डेटा को स्टोर करने के विभिन्न तरीकों के बारे में जानेंगे और यह भी सीखेंगे कि अपने IoT सेवा से डेटा को सर्वरलेस कोड का उपयोग करके कैसे स्टोर किया जाए। + +इस पाठ में हम निम्नलिखित विषयों को कवर करेंगे: + +* [संरचित और असंरचित डेटा](../../../../../3-transport/lessons/2-store-location-data) +* [GPS डेटा को IoT हब पर भेजें](../../../../../3-transport/lessons/2-store-location-data) +* [हॉट, वॉर्म और कोल्ड पाथ्स](../../../../../3-transport/lessons/2-store-location-data) +* [GPS इवेंट्स को सर्वरलेस कोड का उपयोग करके हैंडल करें](../../../../../3-transport/lessons/2-store-location-data) +* [Azure स्टोरेज अकाउंट्स](../../../../../3-transport/lessons/2-store-location-data) +* [अपने सर्वरलेस कोड को स्टोरेज से कनेक्ट करें](../../../../../3-transport/lessons/2-store-location-data) + +## संरचित और असंरचित डेटा + +कंप्यूटर सिस्टम डेटा के साथ काम करते हैं, और यह डेटा विभिन्न आकारों और प्रकारों में आता है। यह एकल नंबर से लेकर बड़े टेक्स्ट, वीडियो, इमेज और IoT डेटा तक हो सकता है। डेटा को आमतौर पर दो श्रेणियों में विभाजित किया जा सकता है - *संरचित* डेटा और *असंरचित* डेटा। + +* **संरचित डेटा** वह डेटा है जिसका एक स्पष्ट, कठोर ढांचा होता है जो नहीं बदलता और आमतौर पर डेटा की तालिकाओं और उनके संबंधों से मेल खाता है। उदाहरण के लिए, किसी व्यक्ति का नाम, जन्म तिथि और पता। + +* **असंरचित डेटा** वह डेटा है जिसका कोई स्पष्ट, कठोर ढांचा नहीं होता, और जो अक्सर बदल सकता है। उदाहरण के लिए, लिखित दस्तावेज़ या स्प्रेडशीट। + +✅ शोध करें: क्या आप संरचित और असंरचित डेटा के कुछ अन्य उदाहरण सोच सकते हैं? + +> 💁 इसके अलावा, *अर्ध-संरचित डेटा* भी होता है, जो संरचित होता है लेकिन निश्चित तालिकाओं में फिट नहीं होता। + +IoT डेटा को आमतौर पर असंरचित डेटा माना जाता है। + +कल्पना करें कि आप एक बड़े वाणिज्यिक खेत के वाहनों के बेड़े में IoT डिवाइस जोड़ रहे हैं। आप विभिन्न प्रकार के वाहनों के लिए अलग-अलग डिवाइस का उपयोग करना चाह सकते हैं। उदाहरण के लिए: + +* खेत के वाहनों जैसे ट्रैक्टर के लिए आप GPS डेटा चाहते हैं ताकि यह सुनिश्चित किया जा सके कि वे सही खेतों पर काम कर रहे हैं। +* खाद्य पदार्थों को गोदामों तक ले जाने वाले डिलीवरी ट्रकों के लिए आप GPS डेटा के साथ-साथ गति और त्वरण डेटा चाहते हैं ताकि यह सुनिश्चित किया जा सके कि ड्राइवर सुरक्षित रूप से चला रहा है, और ड्राइव पहचान और स्टार्ट/स्टॉप डेटा ताकि स्थानीय कानूनों के तहत काम के घंटे का पालन हो सके। +* रेफ्रिजरेटेड ट्रकों के लिए आप तापमान डेटा चाहते हैं ताकि यह सुनिश्चित किया जा सके कि खाद्य पदार्थ बहुत गर्म या ठंडे न हों और ट्रांज़िट में खराब न हों। + +यह डेटा लगातार बदल सकता है। उदाहरण के लिए, यदि IoT डिवाइस ट्रक के कैब में है, तो यह डेटा ट्रेलर बदलने के साथ बदल सकता है, जैसे कि केवल रेफ्रिजरेटेड ट्रेलर का उपयोग होने पर तापमान डेटा भेजना। + +✅ और कौन सा IoT डेटा कैप्चर किया जा सकता है? ट्रकों द्वारा ले जाने वाले लोड और रखरखाव डेटा के बारे में सोचें। + +यह डेटा वाहन से वाहन में भिन्न होता है, लेकिन यह सब एक ही IoT सेवा में प्रोसेसिंग के लिए भेजा जाता है। IoT सेवा को इस असंरचित डेटा को प्रोसेस करने में सक्षम होना चाहिए, इसे इस तरह से स्टोर करना चाहिए कि इसे खोजा या विश्लेषण किया जा सके, लेकिन इस डेटा के विभिन्न ढांचों के साथ काम कर सके। + +### SQL बनाम NoSQL स्टोरेज + +डेटाबेस ऐसी सेवाएं हैं जो आपको डेटा स्टोर और क्वेरी करने की अनुमति देती हैं। डेटाबेस दो प्रकार के होते हैं - SQL और NoSQL। + +#### SQL डेटाबेस + +पहले डेटाबेस रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) थे, जिन्हें रिलेशनल डेटाबेस भी कहा जाता है। इन्हें SQL डेटाबेस भी कहा जाता है क्योंकि इनमें डेटा जोड़ने, हटाने, अपडेट करने या क्वेरी करने के लिए स्ट्रक्चर्ड क्वेरी लैंग्वेज (SQL) का उपयोग किया जाता है। ये डेटाबेस एक स्कीमा से बने होते हैं - डेटा की एक स्पष्ट रूप से परिभाषित तालिका सेट, जो स्प्रेडशीट के समान होती है। प्रत्येक तालिका में कई नामित कॉलम होते हैं। जब आप डेटा डालते हैं, तो आप तालिका में एक पंक्ति जोड़ते हैं, प्रत्येक कॉलम में मान डालते हैं। यह डेटा को एक बहुत ही कठोर ढांचे में रखता है - हालांकि आप कॉलम खाली छोड़ सकते हैं, यदि आप एक नया कॉलम जोड़ना चाहते हैं तो आपको इसे डेटाबेस में करना होगा और मौजूदा पंक्तियों के लिए मान भरना होगा। ये डेटाबेस रिलेशनल होते हैं - यानी एक तालिका का दूसरे तालिका से संबंध हो सकता है। + +![एक रिलेशनल डेटाबेस जिसमें उपयोगकर्ता तालिका का ID खरीदारी तालिका के उपयोगकर्ता ID कॉलम से संबंधित है, और उत्पाद तालिका का ID खरीदारी तालिका के उत्पाद ID से संबंधित है](../../../../../translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.hi.png) + +उदाहरण के लिए, यदि आप उपयोगकर्ता का व्यक्तिगत विवरण एक तालिका में स्टोर करते हैं, तो आपके पास प्रत्येक उपयोगकर्ता के लिए एक प्रकार का आंतरिक अद्वितीय ID होगा जो उपयोगकर्ता का नाम और पता वाली तालिका में उपयोग किया जाता है। यदि आप उस उपयोगकर्ता के बारे में अन्य विवरण स्टोर करना चाहते हैं, जैसे उनकी खरीदारी, तो आप एक नई तालिका में एक कॉलम में उस उपयोगकर्ता का ID रखेंगे। जब आप किसी उपयोगकर्ता को खोजते हैं, तो आप उनके ID का उपयोग करके उनके व्यक्तिगत विवरण एक तालिका से और उनकी खरीदारी दूसरी तालिका से प्राप्त कर सकते हैं। + +SQL डेटाबेस संरचित डेटा को स्टोर करने और यह सुनिश्चित करने के लिए आदर्श हैं कि डेटा आपके स्कीमा से मेल खाता है। + +✅ यदि आपने पहले SQL का उपयोग नहीं किया है, तो [SQL पेज पर Wikipedia](https://wikipedia.org/wiki/SQL) पर इसके बारे में पढ़ें। + +कुछ प्रसिद्ध SQL डेटाबेस हैं Microsoft SQL Server, MySQL, और PostgreSQL। + +✅ शोध करें: इन SQL डेटाबेस और उनकी क्षमताओं के बारे में पढ़ें। + +#### NoSQL डेटाबेस + +NoSQL डेटाबेस को NoSQL कहा जाता है क्योंकि इनमें SQL डेटाबेस की तरह कठोर ढांचा नहीं होता। इन्हें डॉक्यूमेंट डेटाबेस भी कहा जाता है क्योंकि ये असंरचित डेटा जैसे डॉक्यूमेंट को स्टोर कर सकते हैं। + +> 💁 उनके नाम के बावजूद, कुछ NoSQL डेटाबेस आपको SQL का उपयोग करके डेटा क्वेरी करने की अनुमति देते हैं। + +![NoSQL डेटाबेस में फोल्डरों में डॉक्यूमेंट](../../../../../translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.hi.png) + +NoSQL डेटाबेस में पहले से परिभाषित स्कीमा नहीं होता जो डेटा को स्टोर करने के तरीके को सीमित करता है। इसके बजाय, आप किसी भी असंरचित डेटा को डाल सकते हैं, आमतौर पर JSON डॉक्यूमेंट का उपयोग करके। इन डॉक्यूमेंट को फोल्डरों में व्यवस्थित किया जा सकता है, जैसे आपके कंप्यूटर पर फाइलें। प्रत्येक डॉक्यूमेंट में अन्य डॉक्यूमेंट से अलग फील्ड हो सकते हैं - उदाहरण के लिए, यदि आप अपने खेत के वाहनों से IoT डेटा स्टोर कर रहे हैं, तो कुछ में एक्सेलेरोमीटर और गति डेटा के लिए फील्ड हो सकते हैं, जबकि अन्य में ट्रेलर के तापमान के लिए फील्ड हो सकते हैं। यदि आप एक नए ट्रक प्रकार को जोड़ते हैं, जैसे कि ऐसा ट्रक जिसमें उत्पाद के वजन को ट्रैक करने के लिए बिल्ट-इन स्केल हो, तो आपका IoT डिवाइस इस नए फील्ड को जोड़ सकता है और इसे डेटाबेस में बिना किसी बदलाव के स्टोर किया जा सकता है। + +कुछ प्रसिद्ध NoSQL डेटाबेस हैं Azure CosmosDB, MongoDB, और CouchDB। + +✅ शोध करें: इन NoSQL डेटाबेस और उनकी क्षमताओं के बारे में पढ़ें। + +इस पाठ में, आप IoT डेटा को स्टोर करने के लिए NoSQL स्टोरेज का उपयोग करेंगे। + +## GPS डेटा को IoT हब पर भेजें + +पिछले पाठ में आपने अपने IoT डिवाइस से जुड़े GPS सेंसर से GPS डेटा कैप्चर किया। इस IoT डेटा को क्लाउड में स्टोर करने के लिए, आपको इसे IoT सेवा पर भेजना होगा। एक बार फिर, आप Azure IoT Hub का उपयोग करेंगे, वही IoT क्लाउड सेवा जिसे आपने पिछले प्रोजेक्ट में उपयोग किया था। + +![IoT डिवाइस से IoT हब तक GPS टेलीमेट्री भेजना](../../../../../translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.hi.png) + +### कार्य - GPS डेटा को IoT हब पर भेजें + +1. फ्री टियर का उपयोग करके एक नया IoT हब बनाएं। + + > ⚠️ यदि आवश्यक हो, तो [प्रोजेक्ट 2, पाठ 4 से IoT हब बनाने के निर्देश](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#create-an-iot-service-in-the-cloud) देखें। + + एक नया रिसोर्स ग्रुप बनाना याद रखें। नए रिसोर्स ग्रुप का नाम `gps-sensor` रखें, और नए IoT हब का नाम `gps-sensor` पर आधारित एक अद्वितीय नाम रखें, जैसे `gps-sensor-<आपका नाम>`। + + > 💁 यदि आपके पास पिछले प्रोजेक्ट से आपका IoT हब अभी भी है, तो आप इसे पुनः उपयोग कर सकते हैं। अन्य सेवाएं बनाते समय इस IoT हब और उसके रिसोर्स ग्रुप का नाम उपयोग करना याद रखें। + +1. IoT हब में एक नया डिवाइस जोड़ें। इस डिवाइस का नाम `gps-sensor` रखें। डिवाइस के लिए कनेक्शन स्ट्रिंग प्राप्त करें। + +1. अपने डिवाइस कोड को अपडेट करें ताकि GPS डेटा को नए IoT हब पर डिवाइस कनेक्शन स्ट्रिंग का उपयोग करके भेजा जा सके। + + > ⚠️ यदि आवश्यक हो, तो [प्रोजेक्ट 2, पाठ 4 से अपने डिवाइस को IoT से कनेक्ट करने के निर्देश](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#connect-your-device-to-the-iot-service) देखें। + +1. जब आप GPS डेटा भेजें, तो इसे निम्नलिखित JSON प्रारूप में भेजें: + + ```json + { + "gps" : + { + "lat" : , + "lon" : + } + } + ``` + +1. GPS डेटा हर मिनट भेजें ताकि आप अपने दैनिक संदेश आवंटन का उपयोग न करें। + +यदि आप Wio Terminal का उपयोग कर रहे हैं, तो सभी आवश्यक लाइब्रेरी जोड़ना याद रखें और NTP सर्वर का उपयोग करके समय सेट करें। आपका कोड यह सुनिश्चित करने की आवश्यकता होगी कि GPS लोकेशन भेजने से पहले उसने सीरियल पोर्ट से सभी डेटा पढ़ लिया है, पिछले पाठ के मौजूदा कोड का उपयोग करके। JSON डॉक्यूमेंट बनाने के लिए निम्नलिखित कोड का उपयोग करें: + +```cpp +DynamicJsonDocument doc(1024); +doc["gps"]["lat"] = gps.location.lat(); +doc["gps"]["lon"] = gps.location.lng(); +``` + +यदि आप वर्चुअल IoT डिवाइस का उपयोग कर रहे हैं, तो वर्चुअल एनवायरनमेंट का उपयोग करके सभी आवश्यक लाइब्रेरी इंस्टॉल करना याद रखें। + +Raspberry Pi और वर्चुअल IoT डिवाइस दोनों के लिए, पिछले पाठ के मौजूदा कोड का उपयोग करके अक्षांश और देशांतर मान प्राप्त करें, फिर उन्हें सही JSON प्रारूप में निम्नलिखित कोड के साथ भेजें: + +```python +message_json = { "gps" : { "lat":lat, "lon":lon } } +print("Sending telemetry", message_json) +message = Message(json.dumps(message_json)) +``` + +> 💁 आप इस कोड को [code/wio-terminal](../../../../../3-transport/lessons/2-store-location-data/code/wio-terminal), [code/pi](../../../../../3-transport/lessons/2-store-location-data/code/pi) या [code/virtual-device](../../../../../3-transport/lessons/2-store-location-data/code/virtual-device) फ़ोल्डर में पा सकते हैं। + +अपने डिवाइस कोड को चलाएं और सुनिश्चित करें कि संदेश IoT हब में `az iot hub monitor-events` CLI कमांड का उपयोग करके प्रवाहित हो रहे हैं। + +## हॉट, वॉर्म और कोल्ड पाथ्स + +IoT डिवाइस से क्लाउड तक प्रवाहित डेटा हमेशा रियल टाइम में प्रोसेस नहीं किया जाता। कुछ डेटा को रियल टाइम प्रोसेसिंग की आवश्यकता होती है, अन्य डेटा को थोड़ी देर बाद प्रोसेस किया जा सकता है, और अन्य डेटा को बहुत बाद में प्रोसेस किया जा सकता है। डेटा के प्रवाह को विभिन्न सेवाओं में जो अलग-अलग समय पर डेटा प्रोसेस करती हैं, हॉट, वॉर्म और कोल्ड पाथ्स कहा जाता है। + +### हॉट पाथ + +हॉट पाथ उस डेटा को संदर्भित करता है जिसे रियल टाइम या लगभग रियल टाइम में प्रोसेस करने की आवश्यकता होती है। आप हॉट पाथ डेटा का उपयोग अलर्ट के लिए करेंगे, जैसे कि यह जानना कि कोई वाहन डिपो के पास पहुंच रहा है, या रेफ्रिजरेटेड ट्रक में तापमान बहुत अधिक है। + +हॉट पाथ डेटा का उपयोग करने के लिए, आपका कोड आपके क्लाउड सेवाओं द्वारा प्राप्त होते ही इवेंट्स पर प्रतिक्रिया देगा। + +### वॉर्म पाथ + +वॉर्म पाथ उस डेटा को संदर्भित करता है जिसे प्राप्त होने के थोड़ी देर बाद प्रोसेस किया जा सकता है, उदाहरण के लिए रिपोर्टिंग या शॉर्ट टर्म एनालिटिक्स के लिए। आप वॉर्म पाथ डेटा का उपयोग दैनिक वाहन माइलेज रिपोर्ट के लिए करेंगे, जो पिछले दिन के डेटा का उपयोग करता है। + +वॉर्म पाथ डेटा को क्लाउड सेवा द्वारा प्राप्त होते ही किसी प्रकार के स्टोरेज में स्टोर किया जाता है जिसे जल्दी एक्सेस किया जा सकता है। + +### कोल्ड पाथ + +कोल्ड पाथ ऐतिहासिक डेटा को संदर्भित करता है, लंबे समय तक डेटा को स्टोर करना ताकि इसे जब भी आवश्यक हो प्रोसेस किया जा सके। उदाहरण के लिए, आप कोल्ड पाथ का उपयोग वार्षिक वाहन माइलेज रिपोर्ट प्राप्त करने के लिए कर सकते हैं, या ईंधन लागत को कम करने के लिए सबसे अनुकूल मार्ग खोजने के लिए रूट्स पर एनालिटिक्स चला सकते हैं। + +कोल्ड पाथ डेटा को डेटा वेयरहाउस में स्टोर किया जाता है - बड़े पैमाने पर डेटा स्टोर करने के लिए डिज़ाइन किए गए डेटाबेस जो कभी नहीं बदलते और जिन्हें जल्दी और आसानी से क्वेरी किया जा सकता है। आमतौर पर आपके क्लाउड एप्लिकेशन में एक नियमित जॉब होती है जो हर दिन, सप्ताह, या महीने में एक नियमित समय पर चलती है ताकि डेटा को वॉर्म पाथ स्टोरेज से डेटा वेयरहाउस में स्थानांतरित किया जा सके। + +✅ अब तक आपने इन पाठों में जो डेटा कैप्चर किया है, वह हॉट, वॉर्म या कोल्ड पाथ डेटा है? + +## GPS इवेंट्स को सर्वरलेस कोड का उपयोग करके हैंडल करें + +एक बार जब डेटा आपके IoT हब में प्रवाहित हो रहा हो, तो आप कुछ सर्वरलेस कोड लिख सकते हैं जो इवेंट-हब संगत एंडपॉइंट पर प्रकाशित इवेंट्स को सुनता है। यह वॉर्म पाथ है - इस डेटा को स्टोर किया जाएगा और अगले पाठ में यात्रा की रिपोर्टिंग के लिए उपयोग किया जाएगा। + +![IoT डिवाइस से IoT हब तक GPS टेलीमेट्री भेजना, फिर इवेंट हब ट्रिगर के माध्यम से Azure Functions तक](../../../../../translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.hi.png) + +### कार्य - GPS इवेंट्स को सर्वरलेस कोड का उपयोग करके हैंडल करें + +1. Azure Functions CLI का उपयोग करके एक Azure Functions ऐप बनाएं। Python रनटाइम का उपयोग करें, और इसे `gps-trigger` नामक फ़ोल्डर में बनाएं, और Functions App प्रोजेक्ट नाम के लिए भी यही नाम उपयोग करें। सुनिश्चित करें कि आप इसके लिए एक वर्चुअल एनवायरमेंट बनाएं। +> ⚠️ आप [Azure Functions प्रोजेक्ट बनाने के निर्देश, प्रोजेक्ट 2, पाठ 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-a-serverless-application) का संदर्भ ले सकते हैं यदि आवश्यक हो। +1. IoT हब के इवेंट हब संगत एंडपॉइंट का उपयोग करते हुए एक IoT हब इवेंट ट्रिगर जोड़ें। + + > ⚠️ यदि आवश्यक हो, तो [प्रोजेक्ट 2, पाठ 5 से IoT हब इवेंट ट्रिगर बनाने के निर्देश](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-an-iot-hub-event-trigger) देखें। + +1. `local.settings.json` फ़ाइल में इवेंट हब संगत एंडपॉइंट कनेक्शन स्ट्रिंग सेट करें, और उस प्रविष्टि के लिए कुंजी का उपयोग `function.json` फ़ाइल में करें। + +1. Azurite ऐप का उपयोग स्थानीय स्टोरेज एमुलेटर के रूप में करें। + +1. यह सुनिश्चित करने के लिए अपने फ़ंक्शन ऐप को चलाएं कि यह आपके GPS डिवाइस से इवेंट प्राप्त कर रहा है। सुनिश्चित करें कि आपका IoT डिवाइस भी चल रहा है और GPS डेटा भेज रहा है। + + ```output + Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}} + ``` + +## Azure स्टोरेज अकाउंट्स + +![Azure स्टोरेज लोगो](../../../../../translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.hi.png) + +Azure स्टोरेज अकाउंट्स एक सामान्य उद्देश्य स्टोरेज सेवा है जो विभिन्न तरीकों से डेटा संग्रहीत कर सकती है। आप डेटा को ब्लॉब्स, कतारों, तालिकाओं, या फ़ाइलों के रूप में संग्रहीत कर सकते हैं, और यह सब एक साथ कर सकते हैं। + +### ब्लॉब स्टोरेज + +*ब्लॉब* का अर्थ है बाइनरी बड़े ऑब्जेक्ट्स, लेकिन यह किसी भी असंरचित डेटा के लिए उपयोग किया जाने वाला शब्द बन गया है। आप ब्लॉब स्टोरेज में कोई भी डेटा संग्रहीत कर सकते हैं, जैसे IoT डेटा वाले JSON दस्तावेज़, छवि और मूवी फ़ाइलें। ब्लॉब स्टोरेज में *कंटेनर* की अवधारणा होती है, जो नामित बकेट्स होते हैं जिनमें आप डेटा संग्रहीत कर सकते हैं, जो रिलेशनल डेटाबेस में तालिकाओं के समान होते हैं। इन कंटेनरों में एक या अधिक फ़ोल्डर हो सकते हैं जिनमें ब्लॉब्स संग्रहीत होते हैं, और प्रत्येक फ़ोल्डर में अन्य फ़ोल्डर हो सकते हैं, जैसे आपकी कंप्यूटर हार्ड डिस्क पर फ़ाइलें संग्रहीत होती हैं। + +इस पाठ में आप IoT डेटा संग्रहीत करने के लिए ब्लॉब स्टोरेज का उपयोग करेंगे। + +✅ शोध करें: [Azure Blob Storage](https://docs.microsoft.com/azure/storage/blobs/storage-blobs-overview?WT.mc_id=academic-17441-jabenn) के बारे में पढ़ें। + +### टेबल स्टोरेज + +टेबल स्टोरेज आपको अर्ध-संरचित डेटा संग्रहीत करने की अनुमति देता है। टेबल स्टोरेज वास्तव में एक NoSQL डेटाबेस है, इसलिए इसे पहले से परिभाषित तालिकाओं के सेट की आवश्यकता नहीं होती है, लेकिन इसे एक या अधिक तालिकाओं में डेटा संग्रहीत करने के लिए डिज़ाइन किया गया है, प्रत्येक पंक्ति को परिभाषित करने के लिए अद्वितीय कुंजियों के साथ। + +✅ शोध करें: [Azure Table Storage](https://docs.microsoft.com/azure/storage/tables/table-storage-overview?WT.mc_id=academic-17441-jabenn) के बारे में पढ़ें। + +### कतार स्टोरेज + +कतार स्टोरेज आपको 64KB तक के संदेशों को एक कतार में संग्रहीत करने की अनुमति देता है। आप संदेशों को कतार के पीछे जोड़ सकते हैं, और उन्हें सामने से पढ़ सकते हैं। जब तक स्टोरेज स्पेस उपलब्ध है, कतारें संदेशों को अनिश्चित काल तक संग्रहीत करती हैं, जिससे संदेशों को लंबे समय तक संग्रहीत किया जा सकता है और आवश्यकता पड़ने पर पढ़ा जा सकता है। उदाहरण के लिए, यदि आप GPS डेटा को संसाधित करने के लिए मासिक कार्य चलाना चाहते हैं, तो आप इसे एक महीने के लिए हर दिन कतार में जोड़ सकते हैं, और फिर महीने के अंत में सभी संदेशों को कतार से संसाधित कर सकते हैं। + +✅ शोध करें: [Azure Queue Storage](https://docs.microsoft.com/azure/storage/queues/storage-queues-introduction?WT.mc_id=academic-17441-jabenn) के बारे में पढ़ें। + +### फ़ाइल स्टोरेज + +फ़ाइल स्टोरेज क्लाउड में फ़ाइलों का भंडारण है, और कोई भी ऐप्स या डिवाइस उद्योग मानक प्रोटोकॉल का उपयोग करके कनेक्ट हो सकते हैं। आप फ़ाइल स्टोरेज में फ़ाइलें लिख सकते हैं, फिर इसे अपने पीसी या मैक पर एक ड्राइव के रूप में माउंट कर सकते हैं। + +✅ शोध करें: [Azure File Storage](https://docs.microsoft.com/azure/storage/files/storage-files-introduction?WT.mc_id=academic-17441-jabenn) के बारे में पढ़ें। + +## अपने सर्वरलेस कोड को स्टोरेज से कनेक्ट करें + +अब आपके फ़ंक्शन ऐप को IoT हब से संदेशों को संग्रहीत करने के लिए ब्लॉब स्टोरेज से कनेक्ट करने की आवश्यकता है। इसे करने के 2 तरीके हैं: + +* फ़ंक्शन कोड के अंदर, ब्लॉब स्टोरेज Python SDK का उपयोग करके ब्लॉब्स के रूप में डेटा लिखें। +* आउटपुट फ़ंक्शन बाइंडिंग का उपयोग करें ताकि फ़ंक्शन के रिटर्न वैल्यू को ब्लॉब स्टोरेज से बाइंड किया जा सके और ब्लॉब को स्वचालित रूप से सहेजा जा सके। + +इस पाठ में, आप Python SDK का उपयोग करके देखेंगे कि ब्लॉब स्टोरेज के साथ कैसे इंटरैक्ट किया जाए। + +![IoT डिवाइस से GPS टेलीमेट्री को IoT हब, फिर इवेंट हब ट्रिगर के माध्यम से Azure Functions, और फिर ब्लॉब स्टोरेज में सहेजना](../../../../../translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.hi.png) + +डेटा को निम्नलिखित प्रारूप में JSON ब्लॉब के रूप में सहेजा जाएगा: + +```json +{ + "device_id": , + "timestamp" :