{"id":247,"date":"2025-11-20T15:07:34","date_gmt":"2025-11-20T15:07:34","guid":{"rendered":"https:\/\/codetypingpro.com\/?p=247"},"modified":"2025-11-20T15:07:34","modified_gmt":"2025-11-20T15:07:34","slug":"37-real-world-python-projects-iot-data-logger","status":"publish","type":"post","link":"https:\/\/codetypingpro.com\/?p=247","title":{"rendered":"37 &#8211; Real-World Python Projects &#8211; IoT Data Logger"},"content":{"rendered":"\n<h6 class=\"wp-block-heading\"><\/h6>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Purpose<\/strong><\/h3>\n\n\n\n<p>A Python-based system that collects data from real sensors (temperature, humidity, motion, gas, etc.), processes it, and stores it in:<\/p>\n\n\n\n<p>\u2714 Local CSV<br>\u2714 Local SQLite database<br>\u2714 Cloud platform (Firebase \/ MQTT \/ Thingspeak)<\/p>\n\n\n\n<p>This is a <strong>must-know IoT project<\/strong> used everywhere\u2014homes, factories, agriculture, vehicles, warehouses.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde0 <strong>What You Will Build<\/strong><\/h1>\n\n\n\n<p>A system that:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Connects to sensors (via Arduino\/ESP32\/Raspberry Pi)<\/li>\n\n\n\n<li>Receives sensor readings via Serial\/WiFi\/MQTT<\/li>\n\n\n\n<li>Stores readings into CSV + SQLite<\/li>\n\n\n\n<li>Generates automatic daily report<\/li>\n\n\n\n<li>Visualizes data (temperature graph)<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\uddf0 <strong>Tech Stack<\/strong><\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Python<\/li>\n\n\n\n<li>PySerial (for reading sensor data)<\/li>\n\n\n\n<li>SQLite3<\/li>\n\n\n\n<li>Pandas<\/li>\n\n\n\n<li>Matplotlib<\/li>\n\n\n\n<li>(Optional) MQTT, Firebase<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udce1 <strong>Example Hardware Setup<\/strong><\/h1>\n\n\n\n<p>You can use any one:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Option A: Arduino + DHT11\/22 Sensor<\/strong><\/h3>\n\n\n\n<p>Arduino \u2192 USB \u2192 Python<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Option B: ESP32\/NodeMCU (WiFi)<\/strong><\/h3>\n\n\n\n<p>ESP32 \u2192 MQTT \u2192 Python<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Option C: Raspberry Pi (direct GPIO)<\/strong><\/h3>\n\n\n\n<p>Python directly reads sensors<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udcc1 Folder Structure<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>IoT_DataLogger\/\n\u2502\u2500\u2500 datalogger.py\n\u2502\u2500\u2500 sensor_reader.py\n\u2502\u2500\u2500 database.db\n\u2502\u2500\u2500 logs\/\n\u2502    \u2514\u2500\u2500 data_2025-11-20.csv\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83e\udde9 <strong>FULL WORKING PYTHON CODE<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ud83d\udccc Part 1 \u2014 Read Sensor Data via Serial (sensor_reader.py)<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>import serial\nimport time\n\ndef read_sensor(port=\"COM3\", baud=9600):\n    ser = serial.Serial(port, baud, timeout=1)\n    time.sleep(2)\n\n    while True:\n        line = ser.readline().decode().strip()\n        if line:\n            return line\n<\/code><\/pre>\n\n\n\n<p>Your Arduino should print something like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>25.7, 60.2    # temperature, humidity\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ud83d\udccc Part 2 \u2014 Data Logger (datalogger.py)<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>import pandas as pd\nimport sqlite3\nfrom datetime import datetime\nfrom sensor_reader import read_sensor\n\ndef init_db():\n    conn = sqlite3.connect(\"database.db\")\n    cur = conn.cursor()\n    cur.execute(\"\"\"\n        CREATE TABLE IF NOT EXISTS sensor_logs(\n            id INTEGER PRIMARY KEY AUTOINCREMENT,\n            timestamp TEXT,\n            temperature REAL,\n            humidity REAL\n        )\n    \"\"\")\n    conn.commit()\n    conn.close()\n\ndef log_to_db(temp, hum):\n    conn = sqlite3.connect(\"database.db\")\n    cur = conn.cursor()\n    cur.execute(\"INSERT INTO sensor_logs(timestamp, temperature, humidity) VALUES (?, ?, ?)\",\n                (datetime.now(), temp, hum))\n    conn.commit()\n    conn.close()\n\ndef log_to_csv(temp, hum):\n    date = datetime.now().strftime(\"%Y-%m-%d\")\n    filename = f\"logs\/data_{date}.csv\"\n    df = pd.DataFrame(&#91;&#91;datetime.now(), temp, hum]],\n                      columns=&#91;'Timestamp', 'Temperature', 'Humidity'])\n    df.to_csv(filename, mode='a', header=not pd.io.common.file_exists(filename), index=False)\n\ninit_db()\n\nprint(\"Starting IoT Data Logger...\")\n\nwhile True:\n    data = read_sensor()\n    temp, hum = map(float, data.split(\",\"))\n\n    log_to_db(temp, hum)\n    log_to_csv(temp, hum)\n\n    print(f\"Logged \u2192 Temp: {temp}\u00b0C, Humidity: {hum}%\")\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\udcca <strong>Graph Generator (optional)<\/strong><\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>import pandas as pd\nimport matplotlib.pyplot as plt\n\ndf = pd.read_csv(\"logs\/data_2025-11-20.csv\")\nplt.plot(df&#91;'Timestamp'], df&#91;'Temperature'])\nplt.xticks(rotation=45)\nplt.title(\"Temperature Trend\")\nplt.xlabel(\"Time\")\nplt.ylabel(\"Temperature (\u00b0C)\")\nplt.tight_layout()\nplt.show()\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ud83d\ude80 <strong>Optional Cloud Integrations<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\u2714 MQTT Publisher (Python)<\/h2>\n\n\n\n<p>Send data to an IoT cloud dashboard:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install paho-mqtt\n<\/code><\/pre>\n\n\n\n<p>Code:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import paho.mqtt.client as mqtt\n\nclient = mqtt.Client()\nclient.connect(\"broker.hivemq.com\", 1883)\nclient.publish(\"sameer\/home\/temperature\", temp)\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n","protected":false},"excerpt":{"rendered":"<p>Purpose A Python-based system that collects data from real sensors (temperature, humidity, motion, gas, etc.), processes it, and stores it in: \u2714 Local CSV\u2714 Local SQLite database\u2714 Cloud platform (Firebase \/ MQTT \/ Thingspeak) This is a must-know IoT project used everywhere\u2014homes, factories, agriculture, vehicles, warehouses. \ud83e\udde0 What You Will Build A system that: \ud83e\uddf0 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-247","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/codetypingpro.com\/index.php?rest_route=\/wp\/v2\/posts\/247","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/codetypingpro.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codetypingpro.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codetypingpro.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/codetypingpro.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=247"}],"version-history":[{"count":1,"href":"https:\/\/codetypingpro.com\/index.php?rest_route=\/wp\/v2\/posts\/247\/revisions"}],"predecessor-version":[{"id":248,"href":"https:\/\/codetypingpro.com\/index.php?rest_route=\/wp\/v2\/posts\/247\/revisions\/248"}],"wp:attachment":[{"href":"https:\/\/codetypingpro.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=247"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codetypingpro.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=247"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codetypingpro.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=247"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}